Maison >interface Web >Voir.js >Comment communiquer dans différentes situations en vue ? façon de partager
Comment communiquer dans différentes situations en vue ? L'article suivant analysera les méthodes de communication dans vue dans différentes circonstances. J'espère qu'il sera utile à tout le monde !
En fait, tout le monde connaît la communication entre composants en vue. Même si vous ouvrez la bouche, après tout, c'est ce qui est souvent demandé lors des entretiens. Comme je n'y avais pas réfléchi attentivement auparavant, lorsque j'écrivais un petit projet, j'ai rencontré le besoin de communication dans les composants, puis j'ai commencé à l'écrire. Après avoir vérifié pendant longtemps, j'ai réalisé. que cette méthode n'était pas adaptée à cette situation. Ainsi, après cet incident, j'ai décidé d'écrire un article pour classer les méthodes de communication plus clairement et plus soigneusement. Après tout, toutes les méthodes de communication ne conviennent pas à tous les scénarios. (Partage vidéo d'apprentissage : tutoriel vuejs)
La principale chose impliquée dans le même onglet du même navigateur est le transfert de valeur de composants parent-enfant.
Tout le monde devrait être familier avec le concept de gestionnaire d'état.
Cette paire d'options doit être utilisée ensemble pour permettre un composant ancêtre à tous ses descendants. Les descendants injectent une dépendance, quelle que soit la profondeur de la hiérarchie des composants, et elle prendra toujours effet tant que ses relations en amont et en aval sont établies.
provide
et inject
ne sont pas réactives. Cependant, si vous transmettez un objet écoutable, les propriétés de l'objet restent réactives. 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
Les accessoires/$emit sérieux sont trop courants et ils sont tous surutilisés, il n'est donc pas nécessaire d'écrire un exemple de code.
Problèmes :
rrreeerrreeerrreeerrreee
prop
n'est reçu, sera automatiquement défini sur la balise la plus externe à l'intérieur du sous-composant. S'il s'agit de class
et de style
, ils le seront. fusionnés. Les balises les plus externes sont class
et style
. 🎜🎜Si le composant enfant ne souhaite pas hériter des attributs non-prop
transmis par le composant parent, vous pouvez utiliser inheritAttrs
pour désactiver l'héritage, puis transmettre v-bind="$attrs"
Définit les attributs non prop
transmis en externe sur la balise souhaitée, mais cela ne changera pas class
et style
🎜🎜 🎜🎜Lorsqu'un composant parent transmet une valeur à un composant enfant, mais que le composant enfant ne déclare pas toutes les valeurs transmises dans les accessoires, dans le composant enfant, vous pouvez utiliser $ attrs
au proxy pour obtenir tous les composants parents. La valeur transmise. 🎜🎜Exemple : Voici le composant parent🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜Voici le composant enfant : Aucun accessoire déclaré🎜🎜🎜🎜🎜🎜🎜Voici l'affichage dom :🎜🎜 🎜🎜 🎜.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(比如聊天室)
哈哈哈哈
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!