关于vue中extend,mixins,extends,components,install的操作

这篇文章主要介绍了关于vue中extend,mixins,extends,components,install的操作,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

前言

你知道extend,mixins,extends,components,install用法吗? 你知道他们的区别吗?你知道他们的执行顺序嘛? 下面都能找到这些答案.

1.Vue.extend

1.使用vue构造器,创建一个子类,参数是包含组件选项的对象;
2.是全局的

// 创建构造器var Profile = Vue.extend({  template: '

{{extendData}}
实例传入的数据为:{{propsExtend}}

',//template对应的标签最外层必须只有一个标签 data: function () { return { extendData: '这是extend扩展的数据', } }, props:['propsExtend']})// 创建 Profile 实例,并挂载到一个元素上。可以通过propsData传参.new Profile({propsData:{propsExtend:'我是实例传入的数据'}}).$mount('#app-extend')

登录后复制

结论:
Vue.extend实际是创建一个构造器,对应的初始化构造器,并将其挂载到标签上

github源码,请戳这里 ,欢迎star

立即学习“前端免费学习笔记(深入)”;

2.Vue.component

1.将通过 Vue.extend 生成的扩展实例构造器注册(命名)为一个全局组件,参数可以是Vue.extend()扩展的实例,也可以是一个对象(会自动调用extend方法)
2.两个参数,一个组件名,一个extend构造器或者对象

//1.创建组件构造器  var obj = {    props: [],    template: '

{{extendData}}

',//最外层只能有一个大盒子,这个和对应规则一致 data: function () { return { extendData: '这是Vue.component传入Vue.extend注册的组件', } }, }; var Profile = Vue.extend(obj); //2.注册组件方法一:传入Vue.extend扩展过得构造器 Vue.component('component-one', Profile) //2.注册组件方法二:直接传入 Vue.component('component-two', obj) //3.挂载 new Vue({ el: '#app' }); //获取注册的组件 (始终返回构造器) var oneComponent=Vue.component('component-one'); console.log(oneComponent===Profile)//true,返回的Profile构造器

登录后复制

3.mixins

值可以是一个混合对象数组,混合实例可以包含选项,将在extend将相同的选项合并
mixins代码:

    var mixin={    data:{mixinData:'我是mixin的data'},    created:function(){      console.log('这是mixin的created');    },    methods:{      getSum:function(){        console.log('这是mixin的getSum里面的方法');      }    }  }  var mixinTwo={    data:{mixinData:'我是mixinTwo的data'},    created:function(){      console.log('这是mixinTwo的created');    },    methods:{      getSum:function(){        console.log('这是mixinTwo的getSum里面的方法');      }    }  }   var vm=new Vue({    el:'#app',    data:{mixinData:'我是vue实例的data'},    created:function(){      console.log('这是vue实例的created');    },    methods:{      getSum:function(){        console.log('这是vue实例里面getSum的方法');      }    },    mixins:[mixin,mixinTwo]  })    //打印结果为:  这是mixin的created  这是mixinTwo的created  这是vue实例的created  这是vue实例里面getSum的方法

登录后复制

结论:
1.mixins执行的顺序为mixins>mixinTwo>created(vue实例的生命周期钩子);
2.选项中数据属性如data,methods,后面执行的回覆盖前面的,而生命周期钩子都会执行

3.extends

extends用法和mixins很相似,只不过接收的参数是简单的选项对象或构造函数,所以extends只能单次扩展一个组件

var extend={    data:{extendData:'我是extend的data'},    created:function(){      console.log('这是extend的created');    },    methods:{      getSum:function(){        console.log('这是extend的getSum里面的方法');      }    }  }  var mixin={    data:{mixinData:'我是mixin的data'},    created:function(){      console.log('这是mixin的created');    },    methods:{      getSum:function(){        console.log('这是mixin的getSum里面的方法');      }    }  }        var vm=new Vue({    el:'#app',    data:{mixinData:'我是vue实例的data'},    created:function(){      console.log('这是vue实例的created');    },    methods:{      getSum:function(){        console.log('这是vue实例里面getSum的方法');      }    },    mixins:[mixin],    extends:extend  })    //打印结果  这是extend的created  这是mixin的created  这是vue实例的created  这是vue实例的getSum里面的方法

登录后复制

结论:
1.extends执行顺序为:extends>mixins>mixinTwo>created
2.定义的属性覆盖规则和mixins一致

4.components

注册一个局部组件

//1.创建组件构造器  var obj = {    props: [],    template: '

{{extendData}}

',//最外层只能有一个大盒子,这个和对应规则一致 data: function () { return { extendData: '这是component局部注册的组件', } }, }; var Profile = Vue.extend(obj); //3.挂载 new Vue({ el: '#app', components:{ 'component-one':Profile, 'component-two':obj } });

登录后复制

5.install

1.是开发vue的插件,这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象(可选)
2.vue.use方法可以调用install方法,会自动阻止多次注册相同插件

 var MyPlugin = {};  MyPlugin.install = function (Vue, options) {    // 2. 添加全局资源,第二个参数传一个值默认是update对应的值    Vue.directive('click', {      bind(el, binding, vnode, oldVnode) {        //做绑定的准备工作,添加时间监听        console.log('指令my-directive的bind执行啦');      },      inserted: function(el){      //获取绑定的元素      console.log('指令my-directive的inserted执行啦');      },      update: function(){      //根据获得的新值执行对应的更新      //对于初始值也会调用一次      console.log('指令my-directive的update执行啦');      },      componentUpdated: function(){      console.log('指令my-directive的componentUpdated执行啦');      },      unbind: function(){      //做清理操作      //比如移除bind时绑定的事件监听器      console.log('指令my-directive的unbind执行啦');      }    })    // 3. 注入组件    Vue.mixin({      created: function () {        console.log('注入组件的created被调用啦');        console.log('options的值为',options)      }    })    // 4. 添加实例方法    Vue.prototype.$myMethod = function (methodOptions) {      console.log('实例方法myMethod被调用啦');    }  }  //调用MyPlugin  Vue.use(MyPlugin,{someOption: true })  //3.挂载  new Vue({    el: '#app'  });

登录后复制

6.各个方法之间的关系

Vue.extend和Vue.component是为了创建构造器和组件;
mixins和extends是为了拓展组件;
install是开发插件; 总的顺序关系: Vue.extend>Vue.component>extends>mixins

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

对于 React 组件和state|props的解析

对于vue中config/index.js:配置的详解

以上就是关于vue中extend,mixins,extends,components,install的操作的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2746342.html

(0)
上一篇 2025年3月8日 03:56:01
下一篇 2025年3月8日 03:56:10

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 对于webpack4.0配置的详解

    这篇文章主要介绍了关于对webpack4.0配置的详解,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前言 机会总是留给有准备的人,要想在这兵荒马乱的求职季里出类拔萃,拿下你心中期待已久的offer。那么你更因该知道很多别人…

    2025年3月8日
    100
  • jQuery+AJAX+PHP+MySQL开发搜索无跳转无刷新的功能

    这篇文章主要介绍了关于jquery+ajax+php+mysql开发搜索无跳转无刷新的功能,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 知识点:ajax提交表单,php查询数据库,php返回json数组,javascrip…

    2025年3月8日 编程技术
    200
  • 利用JavaScript中发出HTTP请求的方法

    这篇文章主要介绍了关于JavaScript中发出HTTP请求最常用的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以 JavaScript具有很好的模块和方法来发送可用于从服务器端资源发送或接收数据的HTTP请求。在本文中,我们将…

    2025年3月8日 编程技术
    200
  • 对于js的事件冒泡和事件捕获的分析

    这篇文章主要介绍了关于对js的事件冒泡和事件捕获的分析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 事件冒泡 、事件捕获 、 事件委托 1、事件冒泡 、事件捕获 二者联系与区别 联系: (1)、都是 事件触发时序问题 的术…

    2025年3月8日
    200
  • 对于JavaScript中的函数重载的说明

    这篇文章主要介绍了关于对javascript中的函数重载的说明,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 说明 JavaScript 中没有真正意义上的函数重载。 函数重载 函数名相同,函数的参数列表不同(包括参数个数和…

    2025年3月8日
    200
  • Debounce函数和Throttle函数的实现原理

    这篇文章主要介绍了关于debounce函数和throttle函数的实现原理,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 Debounce 和 Throttle 的原理及实现 throttle和debounce均是通过减少实…

    2025年3月8日
    200
  • 如何使用NodeJS + Lighthouse + Gulp搭建自动化网站性能测试的工具

    这篇文章主要介绍了关于如何使用nodejs + lighthouse + gulp搭建自动化网站性能测试的工具,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 假设你还不知道Lighthouse是什么 Lighthouse 是…

    2025年3月8日
    200
  • Vue中eventbus的解析

    这篇文章主要介绍了关于vue中eventbus的解析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 话不多说,直接上干货 现存痛点 你只是想简单的要一个事件的发布订阅来通知下兄弟组件执行个方法? 你是否还在为引入一个even…

    编程技术 2025年3月8日
    200
  • Vue2.0自定义指令与实例的属性和方法

    这篇文章主要介绍了关于vue2.0自定义指令与实例的属性和方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 一、自定义指令 Vue自定义指令和组件一样存在着全局注册和局部注册两种方式。先来看看注册全局指令的方式,通过 Vu…

    2025年3月8日 编程技术
    200
  • 如何解决vue中methods中的方法闭包缓存的问题

    这篇文章主要介绍了关于如何解决vue中methods中的方法闭包缓存的问题,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 vue中methods中的方法闭包缓存问题 问题背景 需求描述 在路由的导航栏中需要, 判断是否为第一…

    2025年3月8日 编程技术
    200

发表回复

登录后才能评论