|
導(dǎo)讀網(wǎng)頁(yè)的本質(zhì)就是超級(jí)文本標(biāo)記語(yǔ)言,通過(guò)結(jié)合使用其他的Web技術(shù)(如:腳本語(yǔ)言、公共網(wǎng)關(guān)接口、組件等),可以創(chuàng)造出功能強(qiáng)大的網(wǎng)頁(yè)。因而,超級(jí)文本標(biāo)記語(yǔ)言是萬(wàn)維網(wǎng)(Web)編程的基礎(chǔ),也就是說(shuō)萬(wàn)維網(wǎng)是建立... 網(wǎng)頁(yè)的本質(zhì)就是超級(jí)文本標(biāo)記語(yǔ)言,通過(guò)結(jié)合使用其他的Web技術(shù)(如:腳本語(yǔ)言、公共網(wǎng)關(guān)接口、組件等),可以創(chuàng)造出功能強(qiáng)大的網(wǎng)頁(yè)。因而,超級(jí)文本標(biāo)記語(yǔ)言是萬(wàn)維網(wǎng)(Web)編程的基礎(chǔ),也就是說(shuō)萬(wàn)維網(wǎng)是建立在超文本基礎(chǔ)之上的。超級(jí)文本標(biāo)記語(yǔ)言之所以稱為超文本標(biāo)記語(yǔ)言,是因?yàn)槲谋局邪怂^“超級(jí)鏈接”點(diǎn)。 本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于Vue2.0中組件的繼承與擴(kuò)展(代碼示例),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。本文將介紹vue2.0中的組件的繼承與擴(kuò)展,主要分享slot、mixins/extends和extend的用法。 一、slot 1.默認(rèn)插槽和匿名插槽 slot用來(lái)獲取組件中的原內(nèi)容,此方式用于父組件向子組件傳遞“標(biāo)簽數(shù)據(jù)”。有的時(shí)候?yàn)椴宀厶峁┠J(rèn)的內(nèi)容是很有用的,例如,一個(gè)<my-hello> 組件可能希望這個(gè)按鈕的默認(rèn)內(nèi)容是“如果沒(méi)有原內(nèi)容,則顯示該內(nèi)容”,但是同時(shí)允許用戶覆寫為別的內(nèi)容。 <body>
<div id="itany">
<my-hello>180812</my-hello>
</div>
<template id="hello">
<div>
<h3>welcome to xiamen</h3>
<slot>如果沒(méi)有原內(nèi)容,則顯示該內(nèi)容</slot>// 默認(rèn)插槽
</div>
</template>
<script>
var vm=new Vue({
el:'#itany',
components:{
'my-hello':{
template:'#hello'
}
}
});
</script>
2.具名插槽有些時(shí)候我們需要多個(gè)插槽, <div id="itany">
<my-hello>
<ul slot="s1">
<li>aaa</li>
<li>bbb</li>
<li>ccc</li>
</ul>
<ol slot="s2">
<li>111</li>
<li>222</li>
<li>333</li>
</ol>
</my-hello>
</div>
<template id="hello">
<div>
<slot name="s2"></slot>
<h3>welcome to xiamen</h3>
<slot name="s1"></slot>
</div>
</template>
<script>
var vm=new Vue({
el:'#itany',
components:{
'my-hello':{
template:'#hello'
}
}
});
</script>
二、mixins1.mixins簡(jiǎn)介混入 (mixins) 是一種分發(fā) Vue 組件中可復(fù)用功能的非常靈活的方式。混入對(duì)象可以包含任意組件選項(xiàng)。當(dāng)組件使用混入對(duì)象時(shí),所有混入對(duì)象的選項(xiàng)將被混入該組件本身的選項(xiàng)。mixins 選項(xiàng)接受一個(gè)混合對(duì)象的數(shù)組。 2.mixins用途一般有兩種用途: 1、在你已經(jīng)寫好了構(gòu)造器后,需要增加方法或者臨時(shí)的活動(dòng)時(shí)使用的方法,這時(shí)用混入會(huì)減少源代碼的污染。 2、很多地方都會(huì)用到的公用方法,用混入的方法可以減少代碼量,實(shí)現(xiàn)代碼重用。 例如下面的例子:實(shí)現(xiàn)每次數(shù)據(jù)變化時(shí)都能夠在控制臺(tái)打印出提示:"數(shù)據(jù)發(fā)生變化" <h1>Mixins</h1>
<hr>
<div id="app">
<p>num:{{ num }}</p>
<P>
<button @click="add">增加數(shù)量<tton>
</P>
</div>
<script type="text/javascript">
var addLog = { //額外臨時(shí)加入時(shí),用于顯示日志
updated: function () {
console.log("數(shù)據(jù)發(fā)生變化,變化成" + this.num + ".");
}
}
Vue.mixin({// 全局注冊(cè)一個(gè)混入,影響注冊(cè)之后所有創(chuàng)建的每個(gè) Vue 實(shí)例
updated: function () {
console.log("我是全局的混入")
}
})
var app = new Vue({
el: '#app',
data: {
num: 1
},
methods: {
add: function () {
this.num++;
}
},
updated() {
console.log("我是原生的update")
},
mixins: [addLog]//混入
})
3.mixins的調(diào)用順序上例說(shuō)明了:從執(zhí)行的先后順序來(lái)說(shuō),混入對(duì)象的鉤子將在組件自身鉤子之前調(diào)用,如果遇到全局混入( 三、extends1.extends用法extends選項(xiàng)允許聲明擴(kuò)展另一個(gè)組件,而無(wú)需使用 <h1>Extends</h1>
<hr>
<div id="app">
num:{{ num }}
<p>
<button @click="add">add</button>
</p>
</div>
<script type="text/javascript">
var bbb = {
updated() {
console.log("我是被擴(kuò)展出來(lái)的");
},
methods: {
add: function () { //跟原生的方法沖突,取原生的方法,這點(diǎn)跟混入一樣
console.log('我是被擴(kuò)展出來(lái)的add方法!');
this.num++;
}
}
};
var app = new Vue({
el: '#app',
data: {
num: 1
},
methods: {
add: function () {
console.log('我是原生add方法');
this.num++;
}
},
updated() {
console.log("我是擴(kuò)展出來(lái)的");
},
extends: bbb// 接收對(duì)象和函數(shù)
})
從上面的例子也可看出,執(zhí)行的先后順序和mixins一樣,另外擴(kuò)展的方法與原生的沖突時(shí),擴(kuò)展的方法不生效,這點(diǎn)跟混入一樣。 2.extends和mixins優(yōu)先級(jí)比較 var extend={
data:{extendData:'我是extend的data'},
created:function(){
console.log('這是extend的created');
}
}
var mixin={
data:{mixinData:'我是mixin的data'},
created:function(){
console.log('這是mixin的created');
}
}
var vm=new Vue({
el:'#app',
data:{mixinData:'我是vue實(shí)例的data'},
created:function(){
console.log('這是vue實(shí)例的created');
},
methods:{
getSum:function(){
console.log('這是vue實(shí)例里面getSum的方法');
}
},
mixins:[mixin],
extends:extend
})
由此可以得出,相對(duì)于mixins,extends觸發(fā)的優(yōu)先級(jí)更高 四、extendVue.extend只是創(chuàng)建一個(gè)構(gòu)造器,它是為了創(chuàng)建可復(fù)用的組件。其主要用來(lái)服務(wù)于Vue.component,用來(lái)生成組件 <div id="itany">
<hello></hello>
<my-world></my-world>
</div>
<script>
/**
* 方式1:先創(chuàng)建組件構(gòu)造器,然后由組件構(gòu)造器創(chuàng)建組件
*/
//1.使用Vue.extend()創(chuàng)建一個(gè)組件構(gòu)造器
var MyComponent = Vue.extend({
template: '<h3>Hello World</h3>'
});
//2.使用Vue.component(標(biāo)簽名,組件構(gòu)造器),根據(jù)組件構(gòu)造器來(lái)創(chuàng)建組件
Vue.component('hello', MyComponent);
/**
* 方式2:直接創(chuàng)建組件(推薦)
*/
// Vue.component('world',{
Vue.component('my-world', {
template: '<h1>你好,世界</h1>'
});
var vm = new Vue({ //這里的vm也是一個(gè)組件,稱為根組件Root
el: '#itany',
data: {}
});
</script>以上就是Vue2.0中組件的繼承與擴(kuò)展(代碼示例)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章! 網(wǎng)站建設(shè)是一個(gè)廣義的術(shù)語(yǔ),涵蓋了許多不同的技能和學(xué)科中所使用的生產(chǎn)和維護(hù)的網(wǎng)站。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!