第一種 父->子
主要通過props實(shí)現(xiàn)父?jìng)髯?
具體實(shí)現(xiàn):
1.先有兩個(gè)組件扔亥,父:A.vue, 子:B.vue,并將b.vue引入A.vue并注冊(cè)
2.在A.vue組件template中使用B.vue工給B.vue綁定傳遞的屬性
例如:
<test-com :sub="title"></test-com>
其中sub表示要傳遞給子組件的屬性,并且sub前要加冒號(hào)(:)
3.在B.vue中通過props接收sub屬性
export default {
props:['sub'],
.....
}
注: 也可以對(duì)父級(jí)傳過來的數(shù)據(jù)類型做驗(yàn)證,例如:
props:{
sub:{
type:Number,
default:0
}
}
第二種 子->父
通過$emit來傳遞
格式: this.$emit('要派發(fā)的自定義事件',要傳遞的數(shù)據(jù));
步驟:
首先:在子組件綁定一個(gè)事件震嫉,觸發(fā)一個(gè)方法,在方法內(nèi)部派發(fā)一個(gè)派發(fā)自定義事件牡属,例如:
html部分:
<button @click="say">向父組件發(fā)送數(shù)據(jù)</button>
js部分:
methods:{
say() {
this.$emit('goup',this.num);
}
}
其次:在父組件使用的子組件中@監(jiān)聽自定義事件票堵,例如:
html部分:
<test-com :sub="title" @goup="getdata"></test-com>
js部分:
getdata(res) {
// console.log(res);
this.msg=res;
}
}
注意:父?jìng)鹘o子級(jí)的數(shù)據(jù),那子級(jí)能否把父級(jí)傳過來的數(shù)據(jù)改變呢逮栅,可以通過添加.sync屬性悴势,即
在父組件中:
<test-com :sub.sync="title" @goup="getdata"></test-com
在子組件中:
methods:{
say() {
this.$emit("update:sub","我是子級(jí)數(shù)據(jù)hello world");
}
}
js數(shù)據(jù)類型
ES6 引入了一種新的原始數(shù)據(jù)類型Symbol窗宇,表示獨(dú)一無二的值。它是 JavaScript 語言的第七種數(shù)據(jù)類型特纤,前六種是:undefined军俊、null、布爾值(Boolean)捧存、字符串(String)粪躬、數(shù)值(Number)、對(duì)象(Object)昔穴。
第三種 兄弟->兄弟(即非父子)
1镰官、global Bus:主要利用創(chuàng)建一個(gè)空vue做為橋梁,實(shí)現(xiàn)兄弟之間通訊
第一步:創(chuàng)建兩個(gè)A,B兄弟組件和一個(gè)bus.js
bus.js文件:
```
import Vue from 'vue'
//創(chuàng)建空的vue
var bus = new Vue()
```
第二步:分別在A,B兩個(gè)兄弟組件中引入bus.js
import bus from '@/components/common/bus'
第三步:在A組件觸發(fā)一個(gè)事件吗货,在事件方法中派發(fā)睚定義事件泳唠,并發(fā)送傳遞給B組件的數(shù)據(jù),例如A->B
A組件代碼中:
html部分:
<button @click="go">將發(fā)送給B組件</button>
js部分:
export default {
data() {
return {
info:'500萬'
}
},
methods:{
go() {
bus.$emit('tob',this.info);
}
}
}
B組件代碼中:在B組件中的生命周期中接收A組件發(fā)過來的數(shù)據(jù)
created() {
bus.$on('tob',(res)=>{
this.msg=res;
})
}
2、vuex
(一)vuex是什么宙搬?Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式
(二)適用場(chǎng)景笨腥?構(gòu)建是一個(gè)中大型單頁應(yīng)用
(三)優(yōu)缺點(diǎn):
優(yōu)點(diǎn):采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài)
缺點(diǎn):如果開發(fā)小型單頁應(yīng)用,使用 Vuex 可能是繁瑣冗余
(四)其他方案:如果開發(fā)小型單頁應(yīng)用勇垛,一個(gè)簡(jiǎn)單的 global event bus 就足夠您所需了
(五)說一下如何實(shí)現(xiàn)脖母?要么說代碼,要么說思路
第一步:安裝vuex
npm install vuex --save
第二步:創(chuàng)建一個(gè)store目錄闲孤,并在內(nèi)部創(chuàng)建一個(gè)index.js
// 在index.js引入下面內(nèi)容:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
//創(chuàng)建存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù)state,集中管理數(shù)據(jù)
const state={
msg:"1509A"
}
//actions中的方法,這里面的方法都是異步操作
const actions={
setValue(context,res) {
// console.log(res);
context.commit('setData',res);
}
}
//創(chuàng)建mutations镶奉,目的是能最終改變倉(cāng)庫(kù)中的數(shù)據(jù),這里是同步操作