vue编译器util工具使用方法示例

 更新时间:2022年07月13日 10:02:18   作者:李李  
这篇文章主要为大家介绍了vue编译器util工具使用方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

makeMap源码:

function makeMap(str, expectsLowerCase) {
	var map = Object.create(null);
	var list = str.split(',');
	for (var i = 0; i < list.length; i++) {
		map[list[i]] = true;
	}
	return expectsLowerCase ?
		function(val) {
			return map[val.toLowerCase()];
		} :
		function(val) {
			return map[val];
		}
}
  • 描述:makeMap 函数首先根据一个字符串生成一个 map,然后根据该 map 产生一个新函数,新函数接收一个字符串参数作为 key,如果这个 key 在 map 中则返回 true,否则返回 undefined。
  • 参数:{String} str 一个以逗号分隔的字符串 、{Boolean} expectsLowerCase 是否小写
  • 返回值:根据生成的 map 产生的函数

isReservedTag 源码:

var isReservedTag = function(tag) {
	return isHTMLTag(tag) || isSVG(tag)
};

判断一个标签是否是保留标签,我们可以知道,如果一个标签是html标签,或者是svg标签,那么这个标签即是保留标签。

pluckModuleFunction 源码:

function pluckModuleFunction(modules,key) {
	return modules ?
		modules.map(function(m) {
			return m[key];
		}).filter(function(_) {
			return _;
		}) : []
}

检测在modules 数组中的成员对象是否有key属性,如果有"采摘"出来,组成一个新的数组。

如下实例代码:

transforms = pluckModuleFunction(options.modules, 'transformNode')

传递给 pluckModuleFunction 函数的第二个参数的字符串为 'transformNode',同时我们观察 options.modules 数组:

var modules$1 = [
	klass$1,
	style$1,
	model$1
];
var klass$1 = {
	staticKeys: ['staticClass'],
	transformNode: transformNode, //处理静态属性和非静态属性
	genData: genData
};
var model$1 = {
	preTransformNode: preTransformNode
};
var style$1 = {
	staticKeys: ['staticStyle'],
	transformNode: transformNode$1, //处理静态样式和非静态样式
	genData: genData$1
};

此时按照 pluckModuleFunction 函数的逻辑:

modules ?
	modules.map(function(m) {
		return m[key];
	}).filter(function(_) {
		return _;
	}) : []

我们拆分开看:

modules ? modules.map(function(m) {
		return m[key];
	})

如果modules存在则,调用 modules.map 创建一个新的数组。

[
  transformNode,
  transformNode$1,
  undefined
]

还没完紧接着又在新生成的数组之上调用了 filter 函数相当于:

[transformNode, transformNode$1, undefined].filter(function(_){ return _ });

把值为 undefined 的元素过滤掉,所以最终生成的数组如下:

[transformNode, transformNode$1]

isReserved 源码:

function isReserved(str) {
	var c = (str + '').charCodeAt(0);
	return c === 0x24 || c === 0x5F
}

在Vue中不允许使用以$或_开头的字符串作为data数据的字段名, isReserved 函数用来检测一个字符串是否以$ 或者 _ 开头。

如:

new Vue({
  data: {
    $count: 1,  // 不允许
    _ret: 2   // 不允许
  }
})

isReserved是如何判断一个字符串是否以 $ 或 _ 开头呢?

它的实现方式是通过字符串的 charCodeAt 方法获得该字符串第一个字符的 unicode,然后与 0x24 和 0x5F 作比较。其中 $ 对应的 unicode 码为 36,对应的十六进制值为 0x24;_ 对应的 unicode 码为 95,对应的十六进制值为 0x5F。

以上就是vue编译器util工具使用方法示例的详细内容,更多关于vue编译器util工具的资料请关注脚本之家其它相关文章!

相关文章

  • el autocomplete支持分页上拉加载使用详解

    el autocomplete支持分页上拉加载使用详解

    这篇文章主要为大家介绍了el autocomplete支持分页上拉加载使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • vue-cli创建的项目中的gitHooks原理解析

    vue-cli创建的项目中的gitHooks原理解析

    这篇文章主要介绍了vue-cli创建的项目中的gitHooks原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • vite+vue3项目中使用SVG方式

    vite+vue3项目中使用SVG方式

    这篇文章主要介绍了vite+vue3项目中使用SVG方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue 2.5 Level E 发布了: 新功能特性一览

    Vue 2.5 Level E 发布了: 新功能特性一览

    很高兴Vue 2.5 Level E 发布了。在这篇文章中,我们将重点介绍一些更重要的的变化:更好的 TypeScript 集成,更好的错误处理,更好地支持单文件组件中的函数式组件以及与环境无关的服务端渲染
    2017-10-10
  • vue封装动态表格方式详解

    vue封装动态表格方式详解

    这篇文章主要为大家介绍了vue封装动态表格方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • vue实现文字横向无缝走马灯组件效果的实例代码

    vue实现文字横向无缝走马灯组件效果的实例代码

    这篇文章主要介绍了vue 文字横向无缝走马灯组件的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • element-plus中el-table点击单行修改背景色方法

    element-plus中el-table点击单行修改背景色方法

    这篇文章主要给大家介绍了关于element-plus中el-table点击单行修改背景色的相关资料,这是产品新加了的一个需求,分享给同样遇到这个需求的朋友,需要的朋友可以参考下
    2023-07-07
  • vue-element-admin登录拦截设置白名单方式

    vue-element-admin登录拦截设置白名单方式

    这篇文章主要介绍了vue-element-admin登录拦截设置白名单方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • tdesign vue初始化组件源码解析

    tdesign vue初始化组件源码解析

    这篇文章主要为大家介绍了tdesign vue初始化组件源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • vue实现用户动态权限登录的代码示例

    vue实现用户动态权限登录的代码示例

    这篇文章主要介绍了vue如何实现用户动态权限登录,文中的代码示例介绍的非常详细,对大家学习vue有一定的帮助,需要的朋友可以参考阅读
    2023-05-05

最新评论