vue中不同情況下怎麼進行通訊?以下這篇文章給大家分析一下vue中不同情況下的通訊方式,希望對大家有幫助!
其實對於vue中元件通訊這件事大家也都不陌生。甚至張口就來,畢竟這也是面試中的常會問到的。由於之前沒有進行過細緻的考慮,在寫小項目的時候遇到了組件中通訊的需求,然後上來就寫,結果發現沒有用,查了好久才知道那種方式不適用這樣情況。所以經過這次事情決定要寫篇文章,對於通訊方式進行更清楚更細緻的分類,畢竟不是每種通訊方式都適用於所有場景。 (學習影片分享:vuejs教學)
##同瀏覽器同頁簽內主要涉及的就是父子元件的傳值。
和
inject 綁定並不是可回應的。不過如果你傳入了一個可監聽的對象,那麼其對象的 property 還是可回應的。
// parent.vue // 此处忽略template模板的东西 <script> export default { name: 'parent', // provide有两种写法 // 第一种 provide: { a: 1, b: 2 } // 第二种 provide() { return { a: 1, b: 2 } } } </script>
// child.vue // 此处忽略template模板的东西 <script> export default { name: 'child', // inject // 第一种 inject: [ 'a', 'b' ] // 第二种 inject: { abc: { // 可以指定任意不与data,props冲突的变量名,然后指定是指向provide中的哪个变量 from: 'a', default: 'sfd' // 如果默认值不是基本数据类型,那就得改用:default: () => {a:1,b:2} }, b: { default: '33' } } } </script>
// utils/eventBus.js import Vue from 'vue' const EventBus = new Vue() export default EventBus
// main.js // 进行全局挂载 import eventBus from '@/utils/eventBus' Vue.prototype.$eventBos = eventBus
// views/parent.vue <template> <div> <button @click="test">测试</button> </div> </template> <script> export default { data() { return {} }, methods: { test() { this.$eventBus.$emit('testBus', 'test') } } }
// views/child.vue <template> <div> {{ testContent }} <!-- test --> </div> </template> <script> export default { data() { return { testContent: '' } }, mounted() { this.$eventBus.$on('test', e => this.testContent = e) } }
接收會自動設定到子元件內部的最外層標籤上,如果是
class 和
style 的話,會合併最外層標籤的
class 和
style。
屬性,可以使用
inheritAttrs 停用繼承,然後透過
v-bind="$ attrs" 將外部傳入的非
prop 屬性設為希望的標籤上,但這不會改變
class 和
style
來代理程式取得所有父元件傳過來的值。
.native
修饰器的) v-on
事件监听器。它可以通过 v-on="$listeners"
传入内部组件——在创建更高层次的组件时非常有用示例:这是父组件
这是子组件
这是执行展示:
同时可以发现子组件加上inheritAttrs:false之后根组件里的未声明props接受的变量消失了
同浏览器的不同页签之间的通讯,大多数的场景是:项目里的增删改查都是打开的新页面,然后新增结束后就触发列表页重新获取列表。这种场景下有什么方法呢?
// 需要监听的页面 mounted() { window.addEventListener('storage', this.storageEvent); }, beforeDestroy() { window.removeEventListener() } methods: { storageEvent(e) { console.log("storage值发生变化后触发:", e) } }
不同浏览器的同一网站的有通讯的必要吗?
如果有那就:websocket(比如聊天室)
哈哈哈哈
以上是vue中不同情況怎麼進行通訊?方式分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!