Vue中的組件詳談
一、組件的注冊
組件注冊需要注意的有五點:
1、data要寫成函數,并且用return返回一個值,這樣不同的調用才能互不影響
2、template后面跟的是飄號,就是Tab上面那個鍵
3、template后面的內容要寫在一個大的div里面,不要分開多個div
4、props后面的是數組,因為有很多個prop
5、要保存成js文件
Vue.component("myson",{
data(){
return{
sonmsg:"hello son"
}
},
template:`
<div>
<p>子組件內容</p>
prop接收到的值:{{sonprop}}
</div>
`,
props:["sonprop"],
methods:{
sonclick(){
this.$emit("sonemit",this.sonmsg)
}
}
})
二、組件的使用
使用時只要注意一點就好,要先引用vue,再引用子組件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript" src="00-組件-子.js"></script>
</head>
<body>
<div id="app">
<myson></myson>
</div>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
parentmsg:"parentmsg to sonprop"
}
})
</script>
</body>
</html>
三、父傳子
父傳子比較簡單,分成兩步
1、在組件里定義prop
props:["sonprop"]
2、使用組件時,用定義的prop綁定父的值
<myson :sonprop="parentmsg"></myson>
父里面的值是這樣的
data:{
parentmsg:"parentmsg to sonprop"
}
詳細傳遞過程是這樣的,看起來比較復雜,其實就上面說的兩步

四、子傳父
子組件給父傳數值要通過方法來傳遞,父和子各定義一個方法,然后用一個中間方法來連接,記住這個中間方法的使用就行了,步驟詳細分解開挺多的
1、在子組件的template的button里使用一個點擊事件
<button @click="sonclick">按鈕</button>
2、在子組件里定義上面使用的方法,觸發(fā)一個中間方法并傳遞數據
sonclick(){
this.$emit("sonemit",this.sonmsg)
}
3、父使用子組件時,用中間方法綁定自己的方法
<myson @sonemit="parentclick"></myson>
4、在父的方法里接收數據,這里p可以寫成任意字符
parentclick(p){
vm.parentmsg=p;
}
詳細代碼圖

運行效果

五、插槽
1、加入插槽,插槽就是在組件里留一個空位,使用組件時可以插入任意東西
在子組件某個位置定義:<slot></slot>
使用組件時就可以在該位置添加任意標簽
2、加入多個插槽時,要為每個插槽命名,使用時每個slot要放在一個template里面
定義多個插槽
template:`
<div>
<p>子組件內容:{{sonmsg}}</p>
<p>分隔線111111111111111</p>
<slot name="a1"></slot>
<p>分隔線2222222</p>
<slot name="a2"></slot>
<p>分隔線333333333</p>
</div>
`,
使用多個插槽,一個template放一個slot
<template slot="a1">
<button>按鈕a1</button>
</template>
<template slot="a2">
<button>按鈕a2</button>
</template>
六、子組件給插槽傳值
1、在子組件template里定義中間數據emitmsg,名字可以隨便
<slot name="a1" :emitmsg="sonmsg"></slot>
2、在父組件里用res接收,不管是多少個子組件,都是用res接收,res是結果集,如果有多個slot的話,數據都會在里面
<template slot="a1" slot-scope="res">
{{res.emitmsg}}
</template>
代碼展示

顯示效果:

總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

