方法一、props/$emit
1、父元件向子元件傳值
父元件中通過v-bind繫結需要給子元件傳遞的值,子元件中通過props拿到父元件傳遞的值
>
"username"
/>
//前者自定義名稱便於子元件呼叫,後者要傳遞資料名
<
/div>
<
/template>
import child from
"./components/child"
export
default},
components:
}
//child子元件
="hello"
>
}<
/span>
<
/div>
<
/template>
export
default}}
<
/script>
2、子元件向父元件傳值
子元件中通過$emit給父元件傳值,第乙個引數為繫結的方法,第二個引數為要傳遞的值;父元件通過v-on監聽子元件傳來的方法。
// 子元件
"pushdatatoparent"
>子元件向父元件傳值<
/button>
<
/div>
<
/template>
export
default},
methods:}}
<
/script>
// 父元件
>
"receivechilddata"
/>
//與子元件titlechanged自定義事件保持一致
// receivechilddata($event)接受傳遞過來的文字
}<
/h2>
<
/div>
<
/template>
import child from
"./components/child"
export
default},
methods:},
components:
}<
/script>
方法二、$emit / $on
這種方法通過乙個空的vue例項作為**事件匯流排(事件中心),用它來觸發事件和監聽事件,巧妙而輕量地實現了任何元件間的通訊,包括父子、兄弟、跨級。
具體實現方式:
var event=
newvue()
;event.
$emit
(事件名,資料)
;//需要傳值的元件使用該方法
event.
$on(事件名,data =>);
//接收資料的元件使用的方法
// 元件a
>
"emitdata"
>傳值<
/button>
<
/div>
<
/template>
export
default},
methods:}}
<
/script>
// 元件b
>
<
/div>
<
/template>
export
default},
mounted()
)}}<
/script>
方法三、provide/ inject
父元件向其所有子元件注入乙個依賴,不論元件層次有多深,並在起上下游關係成立的時間裡始終生效。換句話說:父元件中通過provide來提供變數,然後在子元件中通過inject來注入變數。
provide / inject 解決了跨層級元件間的通訊問題,不過它的使用場景,主要是子元件獲取上級元件的狀態。
// a元件
export
default
}
// b元件
export
default
}
需要注意的是:provide 和 inject 繫結並不是可響應的。這是刻意為之的。然而,如果你傳入了乙個可監聽的物件,那麼其物件的屬性還是可響應的----vue官方文件
所以,上面 a.元件 的 data如果改變了,b元件的 data是不會改變的,仍然是原來傳過來的值。
那麼,provide和inject如何才能實現資料響應式
答案是使用vue2.6版本最新api vue.observable 優化響應式 provide
provide()
);return;}
, methods:
}
}<
/div>
<
/template>
export
default)}
}};<
/script>
方法四、$attrs
繼承所有的父元件屬性(除了prop傳遞的屬性、class 和 style ),通常和inheritattrs一起使用,inheritattrs預設值true,繼承所有的父元件屬性(除props的特定繫結),如果你不希望元件的根元素繼承特性,設定inheritattrs: false,但是class屬性會繼承
//父元件
="hello"
>
最外層元件<
/span>
"'張三'"
:age=
"28"
:***=
"'男'"
/>
<
/div>
<
/template>
import first from
"./first"
;export
default
,data()
;}};
<
/script>
="hello"
>
第一層元件<
/span>
"$attrs"
/>
<
/div>
<
/template>
import second from
"./second"
;export
default
, props:
,created()
}};<
/script>
="hello"
>
第二層子元件元件<
/span>
<
/div>
<
/template>
export
default;}
, props:
,created()
}};<
/script>
方法五、vuex
此處省略一萬字。。。啊哈哈哈哈
vue元件間的幾種通訊方式
1.父 往 子元件上傳遞 props 父元件上寫 子元件上使用 props接收 在vue例項中加上 1.props 2.props parent 2.子 往父親上傳遞 emit 父元件 1.2.在 methods 子元件 1.觸發父元件上的那個child事件 可以在created鉤子函式中定義 th...
vue元件間通訊方式
一 props emit 將要傳遞的引數繫結到元件上,子元件通過props接受引數 props 子元件通過事件傳遞給父元件 this emit functionname 值 只適用於父子 二 on emit 無差別轟炸,想隔幾層隔幾層傳 第一步新建js import vue from vue 使用 ...
Vue元件間通訊方式都有哪些
開始之前,我們把元件間通訊這個詞進行拆分 都知道元件是vue最強大的功能之一,vue中每乙個.vue我們都可以視之為乙個元件 通訊指的是傳送者通過某種 以某種格式來傳遞資訊到收信者以達到某個目的。廣義上,任何資訊的交通都是通訊 元件間通訊即指元件 vue 通過某種方式來傳遞資訊以達到某個目的 舉個栗...