摘要:前言你知道,用法嗎你知道他們的區別嗎你知道他們的執行順序嘛下面都能找到這些答案使用構造器創建一個子類參數是包含組件選項的對象是全局的創建構造器實例傳入的數據為對應的標簽最外層必須只有一個標簽這是擴展的數據創建實例,并掛載到一個元素上。
前言
你知道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.component1.將通過 Vue.extend 生成的擴展實例構造器注冊(命名)為一個全局組件,參數可以是Vue.extend()擴展的實例,也可以是一個對象(會自動調用extend方法)
2.兩個參數,一個組件名,一個extend構造器或者對象
//1.創建組件構造器 var obj = { props: [], template: "3.mixins",//最外層只能有一個大盒子,這個和{{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構造器
值可以是一個混合對象數組,混合實例可以包含選項,將在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,后面執行的回覆蓋前面的,而生命周期鉤子都會執行
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一致
注冊一個局部組件
//1.創建組件構造器 var obj = { props: [], template: "5.install",//最外層只能有一個大盒子,這個和{{extendData}}
對應規則一致 data: function () { return { extendData: "這是component局部注冊的組件", } }, }; var Profile = Vue.extend(obj); //3.掛載 new Vue({ el: "#app", components:{ "component-one":Profile, "component-two":obj } });
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
github源碼,請戳這里,歡迎star
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/52627.html
摘要:前言你知道,用法嗎你知道他們的區別嗎你知道他們的執行順序嘛下面都能找到這些答案使用構造器創建一個子類參數是包含組件選項的對象是全局的創建構造器實例傳入的數據為對應的標簽最外層必須只有一個標簽這是擴展的數據創建實例,并掛載到一個元素上。 前言 你知道extend,mixins,extends,components,install用法嗎? 你知道他們的區別嗎?你知道他們的執行順序嘛? 下面...
摘要:兩個對象鍵名沖突時,取組件對象的鍵值對。允許聲明擴展另一個組件可以是一個簡單的選項對象或構造函數,而無需使用。這主要是為了便于擴展單文件組件。 Vue作為最近最炙手可熱的前端框架,其簡單的入門方式和功能強大的API是其優點。而同時因為其API的多樣性和豐富性,所以他的很多開發方式就和一切基于組件的React不同,如果沒有對Vue的API(有一些甚至文檔都沒提到)有一個全面的了解,那么在...
摘要:父組件在前,子組件在后。,,首先會在子組件里查找,如果沒有,才會沿著原型鏈向上,找父組件中對應的屬性。 在segmentfault上看到了一個問題vue.extend, vue.component 區別,突然有些方,好歹也寫了幾個小vue項目,自己都弄不清楚這些東西... new Vue()、component 首先我們來約定一個選項對象 baseOptions,后面的代碼會用到. ...
摘要:代碼如下核心這里會再次合并一下上的全局的一些指令或則組件或則過濾器到組件的構造函數上最后在內部組件初始化時。會調用這里還是把構造函數的放在了上供后續使用總的來說。將原型指向根構造函數的自然而然就會有的原型上的所有屬性和方法。。 插件:聰明的程序員往往希望能更高(tou)效(lan)的完成指定的工作,插件就是按照一定的封裝方式,暴露接口。讓我們利用這些接口更快捷的實現功能。升職加薪。每個...
摘要:想要使用語法的話,配合,這個插件,體驗更佳,這個插件在語法中實現了。這種方式最接近的單文件組件的寫法,如果一個完善項目從改成,用這種方法很快,只要加上和一些必要的變量類型就好了,然后用包裹就好。不推薦混入用這種方式寫,無法實現多繼承。 最近嘗試了一下 TypeScript,試著把一個 Vue 項目改成了 TypeScript 的,感覺還不錯 目前 Vue 和 TypeScript 的配...
閱讀 871·2021-10-25 09:45
閱讀 3293·2021-09-22 14:58
閱讀 3854·2021-08-31 09:43
閱讀 917·2019-08-30 15:55
閱讀 921·2019-08-29 13:51
閱讀 1231·2019-08-29 13:02
閱讀 3488·2019-08-29 12:52
閱讀 1963·2019-08-26 13:27