温馨提示:此页面服务由第三方为您提供,交易前请仔细核对商家真实资质,勿信夸张宣传和承诺,勿轻易相信预付定金、汇款等交易方式; 此页面所发布文字及图片均由网民自行发布,如有侵权请联系发布者删除。
三菱m80机床解锁vue是怎么渲染一个组件的,是怎么将组件和vue实例渲染区分开来。vue组件实际上是vue的子类,都是通过继承vue而来。通常会使用vue.component()声明一个组件,而这时候声明的组件是一个全局组件,他与vue实例局部组件联系是通过原型链联系起来的,所以在使用组件时会优先使用局部组件。vue.component()的核心是vue.extend(),vue.extend会接受一个对象作为参数,然后根据对象创建一个子类组件构造器函数,并返回组件构造器函数,在实例化这个构造器函数后就会调用init()方法初始化这个组件,也就是创建了组件,调用$mount()后会给组件添加一个watcher并渲染出真实dom元素。
使用方式
Vue.component('my-button', { template: ` <div> <button>按钮</button> </div> ` }) const vm = new Vue({ el: '#app', components: { 'my-button2': { template: ` <button>内部按钮</button> ` } } }) 复制代码
实现过程
创建全局组件
为了能让子组件始终能访问到Vue,需要将Vue存放到Vue.option._base,Vue.component声明的全局组件都会存放到Vue.options.components上,在合并components属性时会对Vue.options.components进行合并。extend()实际上也是反回了Vue的子类,这个子类是用来创建子组件的。
Vue.options._base = Vue; // 用来保证子组件可以访问到Vue构造函数 Vue.options.components = {}; // 用来存放组件的定义 Vue.component = function(id, definition){ definition.name = definition.name || id; definition = this.options._base.extend(definition); // 通过对象产生一个组件构造函数,使用this.options._base调用extend是为了保证始终都是通过调用Vue.extend(),保证extend里面的this指向Vue this.options.components[id] = definition; // 把组件构造函数放在Vue.options里面,实例化Vue的时候会对components属性进行合并 } let cid = 0; Vue.extend = function(options){ const Super = this; // 永远指向Vue,保证Sub永远都是继承于Vue const Sub = function VueComponent(options){ this._init(options); } Sub.cid = cid++; // 给每个组件标号,区分组件 Sub.prototype = Object.create(Super.prototype); Sub.prototype.constructor = Sub; Sub.component = Super.component; // ... Sub.options = mergeOptions(Super.options, options); return Sub; } 复制代码
生成组件的虚拟dom
再根据标签名生成虚拟dom时,标签名可能是我们的自定义组件,因此需要对标签名区分处理,只要不是普通标签那就识别为自定义组件。
export function createElement(vm, tag, data={}, ...children){ if(isReservedTag(tag)){ // 普通标签 return vnode(vm, tag, data, children, data.key, null); }else{ // 自定义组件 const Ctor = vm.$options.components[tag]; return createComponent(vm, tag, data, children, data.key, Ctor)
苏ICP备09042555号-2 | 增值电信业务经营许可证:苏B2-20150120 | 公安部备案号:32020202000170 | Copyright © 无锡市新视点网络科技有限公司 版权所有
免费
报修
微信扫一扫
师傅
抢单
请先关注公众号
方便后期订单推送
图文
软件
138-6175-9787
关注
我们
公众号
顶部