乐趣区

关于vue.js:Vue技术栈开发学习之状态管理bus的使用

Bus

1 新建组件 store.vue, 在路由列表注册, 并在 components 目录下新建一个组件 AInput.vue(本人 创立的组件最好带上前缀)

{

path:’/store’,

component:()=>import(‘@/views/store.vue’)

}

components 的 AInput.vue

<template>

<input @input=”handleInput” :value=”value”>// 绑定 input 事件和 value 值

</template>

<script>

export default{

name:’AInput’,

props:{

value:{// 属性 value

type:[String,Number],

default:”

},

methods:{

handleInput(event){

const value = event.target.value// 获取文本框输出值

this.$emit(‘input’,value)// 把获取到的值传出去

// 留神为什么不能间接在这里批改 value 值,这是 vuex 强调的单向数据流,父级组件之间传值,值的批改肯定是通过父组件,如果向组件与子组件传值肯定是通过属性,而子组件想批改父组件传来的值肯定要通过事件形式来批改

}

}

}

}

</script>

store.vue

<template>

<div>

// 应用 input 组件

<a-input v-model=’inputValue’ />//v-model 双向绑定 (相当于语法糖,相当于:value=”inputValue” @input=”handleInput”)

{{inputValue}}// 显示 inputValue

</div>

</template>

<script>

import AInput from ‘_c/AInput.vue’ // 引入组件

export default{

name:’store’,

components:{// 注册组件

AInput

},

data(){

return {

inputValue:”

}

}

}

</script>

实现过程 input 标签绑定 handleInput 事件,当 input 值批改时会触发 input 里的事件,从而执行 handleInput 办法,值的显示是通过 value

兄弟之间通信

新建 components 组件 Ashow.vue

<template>

{{content}}

</template>

<script>

export default{

props:{

content:{// 属性 value

type:[String,Number],

default:”

}

</script>

在 store.vue 引 Ashow.vue 注册组件

import Ashow from ‘_c/Ashow.vue’

<a-show :content=”inputValue” />

<!—–>

// 跨文件之间如何通信:应用 bus

定义文件夹 bus, 并创立 index.js 文件

import Vue from ‘vue’// 引入 Vue

const Bus = new Vue()// 创立实例

export default Bus// 导出

而后在 main.js 把 bus 引入 import Bus from ‘./bus’

Vue.prototype.$bus = Bus // 在 Vue 的原型对象上增加 Bus(把 bus 注册到根实例)

在之前 Vue 技术栈开发学习,Vue 路由学习根底篇创立的 email.vue 增加

<button @click=”handleClick”> 点击我 </button>

export default{

methods:{

handleClick(){

this.$bus.$emit(‘on-click’,’hahaha’)// 传到 bus

}

}

mount(){// 生命周期

console.log(this.$bus)// 创立一个空的 bus 实例,来作为交互的中介

}

}

在之前 Vue 技术栈开发学习,Vue 路由学习根底篇创立的 phone.vue 用来接管 email 的事件

例如显示 message

{{message}}

export default{

data(){

return {

message:”

}

},

mount(){// 生命周期

this.$bus.$on(‘on-click’,mes=>{//bus 事件监听

this.message = mes

})

}

}

优化 bus

不把 bus 独自放一个文件夹 bus/index.js 重命名为 bus.js 并始终 lib 文件夹下,引入是门路改为./lib/bus

宝宝起名 - 更懂年老父母的起名参谋

退出移动版