4.Vue技术栈开发实战-状态管理bus的使用
状态管理,项目不是很复杂是个简单的项目时,状态管理我们可以使用bus来满足需求。
4.Vue技术栈开发实战-状态管理bus的使用
父子组件之间如何通讯,使用bus多个组件之间的通讯

新建页面store.vue
4.Vue技术栈开发实战-状态管理bus的使用
在路由列表中注册
4.Vue技术栈开发实战-状态管理bus的使用
在components下创建Ainput.vue。A是一个统一的前缀。
4.Vue技术栈开发实战-状态管理bus的使用
我们需要把编辑更改后的值传出去,
4.Vue技术栈开发实战-状态管理bus的使用
使用事件。触发input事件,把这个value推出去。

4.Vue技术栈开发实战-状态管理bus的使用

那么我们如何使用这个Input组件呢?
首先需要先把这个组件引进来
我们之前在vue.config.js内定义了快捷路径_c就代表了src/components路径
4.Vue技术栈开发实战-状态管理bus的使用
上面是简写,这是完整写法。ES6的语法可以省略后面的前提是key和value都相同的情况下
4.Vue技术栈开发实战-状态管理bus的使用
我们习惯性的使用a-input这种写法来调用这个组件。v-model绑定一个值
4.Vue技术栈开发实战-状态管理bus的使用

<!--  -->
<template>
  <input @input="handleInput" :value="value" />
</template>

<script>
export default {
  name: 'AInput',
  props: {
    value: {
      type: [String, Number],
      default: ''
    }
  },
  methods: {
    handleInput (event) {
      const value = event.target.value
      this.$emit('input', value)
    }
  }
}
</script>

 


http://localhost:8080/#/store
4.Vue技术栈开发实战-状态管理bus的使用
加个换行
4.Vue技术栈开发实战-状态管理bus的使用

 

 

<!--  -->
<template>
  <div>
    <a-input v-model="inputValue"></a-input>
   <p> {{ inputValue }} </p>
  </div>
</template>

<script>
import AInput from '_c/AInput.vue'

export default {
  name: 'store',
  components: {
    AInput // 注册组件
  },
  data () {
    return {
      inputValue: ''
    }
  }
}

</script>

 


v-model这个指令是双向绑定,直接绑定了inputValue的值。
4.Vue技术栈开发实战-状态管理bus的使用
组件内首先给input标签绑定一个input事件。当input里面的值发生修改会触发这个input事件,从而执行这个handleInput方法
4.Vue技术栈开发实战-状态管理bus的使用
input里面值的显示是通过value属性,给他设置。
4.Vue技术栈开发实战-状态管理bus的使用
显示的值就是这个value的值。
4.Vue技术栈开发实战-状态管理bus的使用
v-model其实是一个语法糖。它的效果相当于:value给它绑定一个value,然后@input=“handleInput”
4.Vue技术栈开发实战-状态管理bus的使用
上面的:value就是组件内的props的value属性
4.Vue技术栈开发实战-状态管理bus的使用
这里触发input事件,并把这个值作为回调函数的参数,
4.Vue技术栈开发实战-状态管理bus的使用
那么这里就需要你自己写一个handleInput方法,接收子组件传递过来的值 ,接收的参数val就是子组件传递过来的value值。
4.Vue技术栈开发实战-状态管理bus的使用
相当于这样
4.Vue技术栈开发实战-状态管理bus的使用

<!--  -->
<template>
  <div>
    <a-input :value="inputValue" @input="handleInput"></a-input>
   <p> {{ inputValue }} </p>
  </div>
</template>

<script>
import AInput from '_c/AInput.vue'

export default {
  name: 'store',
  components: {
    AInput // 注册组件
  },
  data () {
    return {
      inputValue: ''
    }
  },
  methods: {
    handleInput (val) {
      this.inputValue = val
    }
  }
}

</script>

 


改回,v-model的写法,v-model的写法直接就绑定了值的修改。
4.Vue技术栈开发实战-状态管理bus的使用
通过事件,提交给父组件,然后在父组件绑定一个事件,来知道子组件要改 一个值,改值的操作在父组件内进行修改。
4.Vue技术栈开发实战-状态管理bus的使用
这就是父子组件之间的通信。

兄弟组件之间的通信

再来封装一个组件叫做AShow
4.Vue技术栈开发实战-状态管理bus的使用


4.Vue技术栈开发实战-状态管理bus的使用
引入AShow组件,并注册组件
4.Vue技术栈开发实战-状态管理bus的使用
调用AShow绑定content的值
4.Vue技术栈开发实战-状态管理bus的使用
a-input改成事件的形式。
4.Vue技术栈开发实战-状态管理bus的使用


4.Vue技术栈开发实战-状态管理bus的使用
a-input输入值,下面的 inputValue显示了值,同时把inputValue的值传递给了AShow组件
4.Vue技术栈开发实战-状态管理bus的使用
先把这行注销掉
4.Vue技术栈开发实战-状态管理bus的使用
AInput触发的事件,改变了inputValue的值再传给AShow的content属性
4.Vue技术栈开发实战-状态管理bus的使用
这就是两个兄弟组件如何通信。

4.Vue技术栈开发实战-状态管理bus的使用

跨组件的两个组件通信。

之前定义的tel
4.Vue技术栈开发实战-状态管理bus的使用
还有email。这两个相当于是页面组件。
4.Vue技术栈开发实战-状态管理bus的使用
我们在App.vue里面使用了命名视图
4.Vue技术栈开发实战-状态管理bus的使用
这两个组件分别渲染在了name为email和name为tel的router-view上
4.Vue技术栈开发实战-状态管理bus的使用

bus

他俩之间如果通信呢,就用到了简单的场景bus
创建bus文件夹,然后创建index.js文件
4.Vue技术栈开发实战-状态管理bus的使用
先引入Vue
4.Vue技术栈开发实战-状态管理bus的使用
创建vue的示例叫做Bus,然后把这个bus导出。
4.Vue技术栈开发实战-状态管理bus的使用
Main.js内引入bus。并且注册到根实例上
4.Vue技术栈开发实战-状态管理bus的使用
在元素对象上加,一般我们加一个$符号。这样在这个实例里就注入了$bus
4.Vue技术栈开发实战-状态管理bus的使用
在生命周期钩子里面
4.Vue技术栈开发实战-状态管理bus的使用
看看有没有注册上
4.Vue技术栈开发实战-状态管理bus的使用
看到这个地方已经打印出来了。这就是我们的bus,它就是创建一个空的vue实例。然后来作为你交互的中介。

http://localhost:8080/#/named_view
4.Vue技术栈开发实战-状态管理bus的使用

bus的使用

用$emit触发一个事件,传一个值出去。
4.Vue技术栈开发实战-状态管理bus的使用
tel组件接收这个值。比如我在这里要接收这个message
4.Vue技术栈开发实战-状态管理bus的使用
也是在钩子函数里面,$on添加一个事件监听,事件名叫做on-click,接收一个参数。
4.Vue技术栈开发实战-状态管理bus的使用


4.Vue技术栈开发实战-状态管理bus的使用
为了方便看,给它加一个样式
4.Vue技术栈开发实战-状态管理bus的使用
email也给他一个样式
4.Vue技术栈开发实战-状态管理bus的使用
点击按我,没有效果。
4.Vue技术栈开发实战-状态管理bus的使用
这个地方应该是给bus这个实例,添加事件的监听
4.Vue技术栈开发实战-状态管理bus的使用
添加事件也是$bus上$emit
4.Vue技术栈开发实战-状态管理bus的使用
原理:$emit是能够触发当前实例上的一些事件,$on是给当前事件绑定一个事件监听,
on-click事件是绑定子在this.$bus这个vue实例上的
4.Vue技术栈开发实战-状态管理bus的使用
所以在this.$bus这个实例上监听这个on-click事件,这样就能响应了。
4.Vue技术栈开发实战-状态管理bus的使用
email这个组件里面,自己用this.$on监听自己的事件,上面换成this.$emit
4.Vue技术栈开发实战-状态管理bus的使用
在当前组件触发事件,console会输出,但是tel组件没有接收到数据了
4.Vue技术栈开发实战-状态管理bus的使用
是在当前组件上触发一个事件,在当前组件上绑定一个on去监听
4.Vue技术栈开发实战-状态管理bus的使用
所以如果我们想传递给其他组件应该是在$bus这个实例上触发
4.Vue技术栈开发实战-状态管理bus的使用

这个就是bus的简单应用。
index.js改成bus.js。
4.Vue技术栈开发实战-状态管理bus的使用
移动到lib文件夹下。 bus文件夹删除。
4.Vue技术栈开发实战-状态管理bus的使用
引入的时候从lib文件夹下引入。
4.Vue技术栈开发实战-状态管理bus的使用

git仓库
4.Vue技术栈开发实战-状态管理bus的使用
 

结束

 

相关文章:

  • 2021-10-22
  • 2022-12-23
  • 2021-11-21
  • 2021-10-14
  • 2021-09-12
  • 2021-11-11
  • 2021-07-14
  • 2021-07-31
猜你喜欢
  • 2021-06-14
  • 2022-01-02
  • 2021-12-25
  • 2022-12-23
  • 2021-12-31
  • 2021-10-13
  • 2021-07-09
相关资源
相似解决方案