最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue.js 父子組件通訊開發(fā)實(shí)例

 更新時(shí)間:2016年09月06日 11:44:37   作者:wxc_niuniu  
這篇文章主要介紹了Vue.js 父子組件通訊開發(fā)實(shí)例的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下

vue.js,是一個(gè)構(gòu)建數(shù)據(jù)驅(qū)動(dòng)的 web 界面的庫。Vue.js 的目標(biāo)是通過盡可能簡(jiǎn)單的 API 實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。(這是官方的一個(gè)解釋?。?br />

小編沒使用過angularjs,也沒使用過react.js,不能詳細(xì)的說明三者的區(qū)別,想了解的話,在官方有一個(gè)分析,請(qǐng)點(diǎn)這里查看

小編從業(yè)前端開發(fā)也有了一年多的時(shí)間,剛開始的時(shí)候,前端開發(fā)展現(xiàn)的技術(shù)太多,小編有心無力,兼顧不過來,經(jīng)過了解之后,還是選擇了學(xué)原生js基礎(chǔ)兼并jquery的學(xué)習(xí)上路。小編使用vue.js,也是因?yàn)闃I(yè)務(wù)的需求,為什么不選擇angularjs,其實(shí)就是同時(shí)不能拋棄jquery,vue.js和jquery可以完美的兼容,因?yàn)檫@個(gè)項(xiàng)目,小編也是苦逼了好長(zhǎng)一段時(shí)間,不斷的加班和學(xué)習(xí),避免項(xiàng)目的開發(fā)時(shí)間增加,廢話不多說,下面開始一些小編的vue的學(xué)習(xí)總結(jié),寫得不好,也不要見怪哈,寫文一直是我的短板。。。。

父鏈 小編這里,就是vue的實(shí)例,作為父鏈

子組件可以通過 this.parent它的父親組件。根實(shí)例的可以使用this.root 訪問它。父有一個(gè)數(shù)組 this.children,它所有元素;當(dāng)然,在項(xiàng)目中,我們的組件不可以只有一個(gè)或者兩個(gè),當(dāng)組件多了的時(shí)候,我們是難以記得children中該組件的位置的,我們可以利用 v-ref 的指令,給我們的組件建立一個(gè)鉤子,這個(gè)鉤子,就是我們的其他組件訪問該組件時(shí)的索引

//這是我的一個(gè)組件
<msg v-ref:msgs></msg> //這時(shí)候,我們就為這個(gè)msg組件建立了一個(gè)msgs的索引
//我們可以這樣訪問組件
var vm = new Vue({}); 
var children = vm.$refs.msgs //通過這種方式訪問我們的子組件
//v-ref是一個(gè)數(shù)組或?qū)ο螅俏覀兘⑺衦ef鉤子的組件的集合

這里,給大家看一張圖,看一下parent,children, $refs相關(guān)的內(nèi)容(好像圖片有點(diǎn)模糊,不會(huì)整動(dòng)態(tài)圖,尷尬了,看得不清楚,大家可以自己建立一個(gè)demo打印出來好好!)

盡管我們可以這樣直接訪問整個(gè)實(shí)例里面的組件,但是不建議如此,因?yàn)樽咏M件直接修改父組件的狀態(tài),是非常糟糕的,這會(huì)讓父子組件緊密地耦合,理想的情況下,每個(gè)組件只能修改自己本身的狀態(tài),因?yàn)槊總€(gè)組件的作用域都是獨(dú)立的;

這種情況下,vue也為我們帶來了它們的自定義事件

使用 $dispatch() 派發(fā)事件,事件沿著父鏈冒泡;

使用 $broadcast() 廣播事件,事件向下傳導(dǎo)給所有的后代。

看起來,有點(diǎn)抽象,來個(gè)例子,就好理解很多了

//$dispatch()冒泡案例
<!-- 實(shí)例 -->
<div id="app">
<!-- 組件通訊一 -->
<section> 
<div class="mas-arry">
<label for="">msg的數(shù)據(jù):</label>{{ msg }} 
</div>
<!--子組件 -->
<msg></msg>
</section>
</div>
<template id="msg">
<div class="inp">
<input type="text" v-model="msg">
<a href="javascript:;" @click="add_data">添加</a>
</div>
</template>
<script>
Vue.component('msg',{ //這里直接使用了注冊(cè)組件的語法糖的方式注冊(cè),簡(jiǎn)單快捷
template: '#msg',
data: function() {
return {
msg : 'abc' 
}
},
methods: {
add_data: function(){ //當(dāng)點(diǎn)擊這個(gè)事件的時(shí)候,就會(huì)觸發(fā)$dispatch()方法;add_msg是父組件創(chuàng)建的監(jiān)聽子組件的方法,意思就是,告訴父組件的這個(gè)方法,老爸,我更新數(shù)據(jù)了,par_msg就是我更新的數(shù)據(jù),你也快更新吧!把par_msg 的數(shù)據(jù)傳給父組件更新!
var par_msg = this.msg.trim();
// this.$parent.add(par_msg); //此方式是直接操作父組件的方法
this.$dispatch('add_msg', par_msg); //此方法是利用事件傳播的方式
this.msg = '';
}
}
});
var mvvm = new Vue({
el: '#app',
data: {
msg : ['sgsg']
},
events: { // 創(chuàng)建監(jiān)聽相應(yīng)響應(yīng)子組件的事件
'add_msg': function(msg){ // add_msg 是用來監(jiān)聽子組件的方法,當(dāng)接受到子組件的通知的時(shí)候,就把子組件更新的數(shù)據(jù)更新,這里的msg就是子組件的par_msg
this.msg.push(msg);
}
},
methods: {
add: function(msg){
this.msg.push(msg);
}
}
});
</script>

看完這段代碼,相信大家都知道$dispatch()的冒泡的用法了,其實(shí),就是這么點(diǎn)東西,里面有兩個(gè)參數(shù),第一個(gè)參數(shù),就是父組件監(jiān)聽子組件events對(duì)象里面的一個(gè)方法名,兩者要一致;第二個(gè)參數(shù),就是子組件更新的數(shù)據(jù),同時(shí)也是傳遞給給父組件要同步更新的數(shù)據(jù),然后父組件就用這個(gè)參數(shù)來進(jìn)行相應(yīng)的操作

//$broadcast()方法的用法和$dispatch()的用法是一樣的,不一樣的是,event對(duì)象是在子組件里面創(chuàng)建,相反觸發(fā)的函數(shù)在父組件;這里要說的是,如果子組件的數(shù)據(jù)完全依賴于父組件的數(shù)據(jù),那么,則不需要用通說事件傳遞的方式,只需要通過props獲取父組件的數(shù)據(jù),綁定到子組件身上就可以了

<!-- 組件通訊二 $broadcast()方法 -->
<section class="sec">
<h3>父組件添加的數(shù)據(jù)源:</h3>
<div class="box clearfix">
<label for="" class="box-left">id:</label>
<div class="bor-right">
<input type="text" v-model="id">
</div>
</div>
<div class="box clearfix">
<label for="" class="box-left">姓名:</label>
<div class="bor-right">
<input type="text" v-model="name">
</div>
</div>
<div class="box clearfix">
<label for="" class="box-left">愛好:</label>
<div class="bor-right">
<input type="text" v-model="inst">
</div>
</div>
<div class="box clearfix">
<label for="" class="box-left">&nbsp;</label>
<div class="bor-right">
<a href="javascrip:;" @click="add_table">添加</a>
</div>
</div>
<h3>下面的表格是子組件信息:</h3>
<!-- 把父組件的table_data數(shù)據(jù)綁定到子組件上 -->
<broadcase :data="table_data"></broadcase>
</section>
<template id="broadcase">
<div class="table">
<table>
<thead>
<tr>
<th>id</th>
<th>姓名</th>
<th>愛好</th>
</tr>
</thead>
<tbody>
<tr v-for="list in data">
<td>{{ list.id }}</td>
<td>{{ list.name }}</td>
<td>{{ list.inst }}</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
Vue.component('broadcase',{ //這里直接使用了注冊(cè)組件的語法糖的方式注冊(cè),簡(jiǎn)單快捷
template: '#broadcase',
props: ['data'], // props是用來接受父組件的傳遞參數(shù),也可在里面自定義數(shù)據(jù),如果數(shù)據(jù)需要有默認(rèn)值的話,需在data里面定義
data: function() {
return {
msg : 'abc' 
}
},
events : { //這里只是個(gè)例子,子組件監(jiān)聽父組件的數(shù)據(jù)變化
test : function(msg){
console.log(msg);
}
},
methods: {
}
});
var mvvm = new Vue({
el: '#app',
data: {
table_data: [
{
id: 1,
name: 'gjei',
inst: 'gjweir'
},{
id: 2,
name: 'jiuyer',
inst: 'oiuyt'
}
] 
},
methods: {
add_table: function(){
var set = {
id: this.id,
name: this.name,
inst : this.inst
};
this.table_data.push(set);
// this.$broadcast('test', set); //這里,只是一個(gè)例子語法
this.id = '';
this.name = '';
this.inst = '';
}
}
});
</script>

上處舉的兩個(gè)例子,都可以點(diǎn)擊這里測(cè)試,文件已經(jīng)上傳個(gè)人空間 vue父子組件通訊demo

當(dāng)寫到這里的時(shí)候,回頭看了一下,自己寫的內(nèi)容,貌似寫得有點(diǎn)亂,真是汗顏??!很久之前就想過寫博客,建立自己的筆記庫,只是以前嘗試寫的時(shí)候,真是無法下手如何去寫,最近,下定決心,不管寫的怎么樣,也堅(jiān)持去寫,萬一哪天自己的文筆突然變得好起來了呢!

vue父子組件通訊,其實(shí)應(yīng)用并不是很難,它其實(shí)也是提供了相應(yīng)的api接口監(jiān)聽,實(shí)際的項(xiàng)目應(yīng)用該如何操作變化,還是得需要我們自己寫,重點(diǎn),還是得要提高我們的js水平,畢竟,復(fù)雜的web應(yīng)用越來越多!希望,喜歡前端的同學(xué)們都能在js的路上共勉.

相關(guān)文章

  • Vue中過濾器定義以及使用方法實(shí)例

    Vue中過濾器定義以及使用方法實(shí)例

    過濾器的功能是對(duì)要顯示的數(shù)據(jù)進(jìn)行格式化后再顯示,其并沒有改變?cè)镜臄?shù)據(jù),只是產(chǎn)生新的對(duì)應(yīng)的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Vue中過濾器定義以及使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Vue3中使用Supabase?Auth方法詳解

    Vue3中使用Supabase?Auth方法詳解

    這篇文章主要為大家介紹了Vue3中使用Supabase?Auth方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Vue使用emit傳參,父組件接收不到數(shù)據(jù)的問題及解決

    Vue使用emit傳參,父組件接收不到數(shù)據(jù)的問題及解決

    這篇文章主要介紹了Vue使用emit傳參,父組件接收不到數(shù)據(jù)的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Vue3父子組件間傳參通信的四種方式

    Vue3父子組件間傳參通信的四種方式

    近期學(xué)習(xí)vue3的父子組件之間的傳值,發(fā)現(xiàn)跟vue2的并沒有太大的區(qū)別,下面這篇文章主要給大家介紹了關(guān)于Vue3父子組件間傳參通信的四種方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • vue虛擬DOM和render()函數(shù)詳解

    vue虛擬DOM和render()函數(shù)詳解

    這篇文章主要講述了Vue.js中虛擬DOM和render()函數(shù)的使用方法,虛擬DOM是Vue.js的核心概念,它通過JavaScript對(duì)象來表示DOM樹,從而提高性能,render()函數(shù)比模板更接近編譯器,適用于需要JavaScript編程能力的場(chǎng)景,通過比較更新前后虛擬DOM結(jié)構(gòu)中的差異
    2024-12-12
  • Vue.js學(xué)習(xí)教程之列表渲染詳解

    Vue.js學(xué)習(xí)教程之列表渲染詳解

    這篇文章主要給大家介紹了關(guān)于Vue.js列表渲染的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • vue2.0實(shí)現(xiàn)倒計(jì)時(shí)的插件(時(shí)間戳 刷新 跳轉(zhuǎn) 都不影響)

    vue2.0實(shí)現(xiàn)倒計(jì)時(shí)的插件(時(shí)間戳 刷新 跳轉(zhuǎn) 都不影響)

    我發(fā)現(xiàn)好多倒計(jì)時(shí)的插件,刷新都會(huì)變成從頭再來,于是自己用vue2.0寫了一個(gè),感覺還不錯(cuò),特此分享到腳本之家平臺(tái)供大家參考下
    2017-03-03
  • Vue路由router詳解

    Vue路由router詳解

    這篇文章主要介紹了vue router 配置路由的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-10-10
  • vue?當(dāng)中組件之間共享數(shù)據(jù)的實(shí)現(xiàn)方式

    vue?當(dāng)中組件之間共享數(shù)據(jù)的實(shí)現(xiàn)方式

    這篇文章主要介紹了vue?當(dāng)中組件之間共享數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • element-ui el-dialog嵌套table組件,ref問題及解決

    element-ui el-dialog嵌套table組件,ref問題及解決

    這篇文章主要介紹了element-ui el-dialog嵌套table組件,ref問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論

丹江口市| 色达县| 福海县| 无为县| 威远县| 南华县| 日喀则市| 津南区| 高平市| 闻喜县| 光泽县| 涟源市| 石阡县| 兴隆县| 东乡族自治县| 新源县| 华亭县| 大埔区| 江陵县| 泰顺县| 连江县| 繁昌县| 溧水县| 康定县| 鸡西市| 开江县| 夏津县| 苍山县| 公主岭市| 汾阳市| 怀化市| 特克斯县| 奉贤区| 黄梅县| 武平县| 六盘水市| 邓州市| 庆安县| 皋兰县| 开原市| 兰州市|