Heim > Artikel > Web-Frontend > Wie kommuniziert man in verschiedenen Situationen in Vue? Art zu teilen
Wie kommuniziert man in Vue in verschiedenen Situationen? Im folgenden Artikel werden die Kommunikationsmethoden in vue unter verschiedenen Umständen analysiert. Ich hoffe, dass er für alle hilfreich ist!
Tatsächlich kennt jeder die Komponentenkommunikation in Vue. Auch wenn man den Mund aufmacht, schließlich wird das in Vorstellungsgesprächen oft gefragt. Da ich vorher nicht sorgfältig darüber nachgedacht hatte, stieß ich beim Schreiben eines kleinen Projekts auf die Notwendigkeit einer Kommunikation in Komponenten, und dann begann ich, es zu schreiben. Nach langem Nachprüfen wurde mir klar dass diese Methode für diese Situation nicht geeignet sei. Nach diesem Vorfall habe ich beschlossen, einen Artikel zu schreiben, um Kommunikationsmethoden klarer und sorgfältiger zu klassifizieren. Schließlich ist nicht jede Kommunikationsmethode für alle Szenarien geeignet. (Teilen von Lernvideos: vuejs-Tutorial)
Die Hauptsache im selben Tab desselben Browsers ist die Wertübertragung von Eltern-Kind-Komponenten.
Jeder sollte mit dem Konzept eines State Managers vertraut sein.
Dieses Optionspaar muss zusammen verwendet werden, um eine zu ermöglichen Vorfahrenkomponente für alle ihre Nachkommen. Nachkommen fügen eine Abhängigkeit ein, egal wie tief die Komponentenhierarchie ist, und sie wird immer wirksam, solange ihre Upstream- und Downstream-Beziehungen hergestellt sind.
provide
- und inject
-Bindungen reagieren nicht. Wenn Sie jedoch ein abhörbares Objekt übergeben, reagieren die Eigenschaften des Objekts weiterhin. provide
和 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>
正经的props/$emit可太常见了,都是用烂了的,就不用写示例代码了吧。
问题:
// 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) } }
prop
接收会自动设置到子组件内部的最外层标签上,如果是 class
和 style
的话,会合并最外层标签的 class
和 style
。prop
属性,可以使用 inheritAttrs
禁用继承,然后通过 v-bind="$attrs"
把外部传入的 非 prop
属性设置给希望的标签上,但是这不会改变 class
和 style
$attrs
// 需要监听的页面 mounted() { window.addEventListener('storage', this.storageEvent); }, beforeDestroy() { window.removeEventListener() } methods: { storageEvent(e) { console.log("storage值发生变化后触发:", e) } }rrreee
Ernsthafte Requisiten/$emit sind zu häufig und werden alle überbeansprucht, sodass kein Beispielcode geschrieben werden muss.
Probleme:
rrreeerrreeerrreeerrreee
prop
empfangen wird, wird es automatisch auf das äußerste Tag innerhalb der Unterkomponente gesetzt. Wenn es sich um class
und style
handelt, ist dies der Fall zusammengeführt. Die äußersten Tags sind class
und style
. 🎜🎜Wenn die untergeordnete Komponente die von der übergeordneten Komponente übergebenen Nicht-prop
-Attribute nicht erben möchte, können Sie inheritAttrs
verwenden, um die Vererbung zu deaktivieren, und dann v-bind="$attrs"
Setzt die extern übergebenen Nicht-prop
-Attribute auf das gewünschte Tag, aber dadurch werden class
und style
🎜🎜 🎜🎜Wenn die übergeordnete Komponente Werte an die untergeordnete Komponente übergibt, die untergeordnete Komponente jedoch nicht alle übergebenen Werte in Requisiten deklariert, können Sie in der untergeordneten Komponente $attrs zum Proxy, um alle übergeordneten Komponenten zu erhalten Der übergebene Wert. 🎜🎜Beispiel: Dies ist die übergeordnete Komponente🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜Dies ist die untergeordnete Komponente: Keine Requisiten deklariert🎜🎜🎜🎜🎜🎜🎜Dies ist die Dom-Anzeige:🎜 🎜🎜🎜 🎜.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(比如聊天室)
哈哈哈哈
Das obige ist der detaillierte Inhalt vonWie kommuniziert man in verschiedenen Situationen in Vue? Art zu teilen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!