方法一:Vue插件
1.概述
作用:滿足vue之外的需求,特定場景的需求
比如說,讓你在每個單頁面組件里,都可以調用某個方法(公共方法),或者共享某個變量等
2.使用方法
【聲明插件】- 【寫插件】-【注冊插件】-【使用插件】
生命插肩和寫插件是同時進行的,注冊插件到Vue對象中,最后在Vue組件的時候使用寫的插件
聲明插件
插件的需求都是公共部分,所以會創建文件夾utils,里面創建一個js文件,基本內容如下:
install的第一個參數Vue表示Vue的實例,也就是Vue對象,第二個參數opt表示的是設置選項,是指在調用這個插件時可以傳一個對象。
比如這個對象調用時接受一個參數no,在插件中,我需要將這個no賦值給Vue對象的另一個data,就可以這樣
注冊插件
注冊插件其實就是用import引入后,然后通過Vue.use(插件名),就跟vue-router和vue-resource一樣。
例如:我們通常在main.js中引入各種東西,並且組件的根實例也在這里。
通過import引入文件,然后在創建根組件之前,讓Vue對象通過use方法注冊插件,通過這兩步,就可以使用插件了。
3.寫插件、使用插件
按照官方文檔,寫插件有四種方法,示例如下:(鏈接:https://cn.vuejs.org/v2/guide/plugins.html#ad)
3.1【添加實例方法或屬性】
1.核心思想是,通過prototype來添加方法和屬性
2.寫:
3.用:
4.假如添加的是屬性:
如:Vue.prototype.no= 1;
會發生什么事情呢?
1.不管是【按值傳遞類型】還是【按引用傳遞類型】,該變量都不會被不同組件所共享,更准確的說,假如有A,B兩個組件。A里面的no數值改變,B組件里的no數值是不會跟着改變的。
2. 當組件里沒有該屬性時,調用時,顯示的是通過插件獲取的值;
當組件里有該屬性時,調用是,顯示的是該組件里該屬性的值;
所以,函數也是這樣的,組件里的同名函數總是會覆蓋插件提供的函數。
3.2【添加全局方法或屬性】
1.核心思想:就是給Vue對象添加一個方法或屬性。
和3.1區別是,3.1是給組件內部使用的,相當於組件Methods里定義的方法,而3.2是給Vue對象使用的。
例如:有一個方法test(),那么:
通過3.1添加,是在組件里,通過this.test()來調用
通過3.2添加,是在外面通過Vue實例,如Vue.test()來調用
2.寫:
Vue.test= function (){ alert(2) }
3.用:
Vue.test()
3.3【注入組件】
1.核心思想:
就像寫Vue組件時,那樣寫,方法名保持一致,其會在執行組件對應的方法名之前執行,或者不需要這種需求,只是簡單注入到各個組件methods中
2.寫:
【注入給非Vue實例本身就有的方法】:
假如是給比如methods屬性的某個方法,例如上圖的showBank,若組件中有showBank就不會執行插件中的這個showBank,如果組件中沒有才會執行插件中的這個showBank。其實就是同名先執行組件本身中的方法。
3.用:
和正常寫在組件內部methods屬性里面的方法使用方式一樣,注入其實就是和寫在內部methods中等同!
3.4【添加全局資源】
和正常方法類似,甚至幾乎一樣,可以添加【自定義指令】【過濾器】【過渡】等,這里以【過濾器】為例
1.寫:
:
2.用:
{{num | formatTime}}
4.demo示例
版權聲明:參考自http://blog.csdn.net/qq20004604