Vue之自定義事件內(nèi)容分發(fā)詳解
1、小伙伴們這個理解起來有點復(fù)雜,希望仔細(xì)看里面的原理,自己去敲一遍:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<todo>
<xian slot="xian" :title="title"></xian>
// 建議從后面往前看,理解為遍歷得到的值賦值給v-bind,v-bind的值賦值給props同名的值
// [提醒]v-on:綁定的自定義事件名會自動變成小寫,如果有人事件名用了大寫,下面this.$emit里仍然是大寫,會綁定不上
<yu slot="yu" v-for="(item,index) in items"
v-bind:item="item" v-bind:index="index"
v-on:remove="deleteItems(index)"></yu>
// Vue實例將數(shù)據(jù)和方法與View層綁定,View層在分發(fā)這些數(shù)據(jù)和方法到下面的組件綁定,View相當(dāng)于中轉(zhuǎn)了Vue實例的數(shù)據(jù)和方法交由組件控制
</todo>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
Vue.component("todo",{
template: '<div>\
<slot name="xian"></slot>\
<ul>\
<slot name="yu"></slot>\
</ul>\
</div>'
});
Vue.component("xian",{
props: ['title'],
template: '<div>{{title}}</div>'
});
Vue.component("yu",{// props是參數(shù)名,類似于變量名,可以隨便定義,v-bind綁定的是變量,是數(shù)據(jù),是定義的變量
props: ['item','index'],
// 只能綁定當(dāng)前組件的方法
template: '<li>{{index}}---->{{item}}<button @click="remove">delete</button></li>',
methods: {
remove: function (index) {
// this.$emit 自定義事件分發(fā)
// 【注意】this.$emit('事件名')這個事件名要使用kebab-case(短橫線命名)方式,不要寫成camelCased (駝峰式);
this.$emit('remove',index);
}
}
});
var vm = new Vue({
el: "#app",
data: {
title: "作者",
items: ['咸魚翻身1','咸魚翻身2','咸魚翻身3']
},
methods: {
deleteItems: function (index) {
console.log("您刪除了"+this.items[index]);
this.items.splice(index,1);
}
}
});
</script>
</body>
</html>
運行結(jié)果:

當(dāng)我們點擊刪除就能刪除任意的作者名字,這里我點擊刪除第二個,顯示結(jié)果如下:

2、這里有一個圖供大家理解:

理解大概是這樣 組件和實例之間方法不能互調(diào) 而要刪除的節(jié)點屬于實例的屬性 所以通過事件分發(fā)讓組件中定義的方法轉(zhuǎn)向?qū)嵗卸x的方法 然后刪除節(jié)點
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
vue中watch和computed為什么能監(jiān)聽到數(shù)據(jù)的改變以及不同之處
這篇文章主要介紹了vue中watch和computed為什么能監(jiān)聽到數(shù)據(jù)的改變以及不同之處,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12
Element框架el-tab點擊標(biāo)簽頁時再渲染問題的解決
本文主要介紹了Element框架el-tab點擊標(biāo)簽頁時再渲染問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Vue數(shù)據(jù)驅(qū)動模擬實現(xiàn)3
這篇文章主要為大家詳細(xì)介紹了Vue數(shù)據(jù)驅(qū)動模擬實現(xiàn),教大家如何在某個對象中,新增某個屬性,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01
Vue.js 2.0學(xué)習(xí)教程之從基礎(chǔ)到組件詳解
這篇文章主要介紹了Vue.js 2.0從基礎(chǔ)到組件的相關(guān)資料,文中介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue.js具有一定的參考價值,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。2017-04-04

