vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)_vue.js

来源:脚本之家  责任编辑:小易  

前言 我们在vue项目中,经常有这样的需求,父组件绑定v-model,子组件输入更改父组件v-model绑定的数值。很多朋友对这种操作不是很清楚,这需要对v-model有比较深入的了解,今天谈谈v-model。 vue的双向数据绑定 v-model这个指令只能用在<input>, <select>,<textarea>这些表单元素上,所谓双向绑定,指的就是我们在js中的vue实例中的data与其渲染的dom元素上的内容保持一致,两者无论谁被改变,另一方也会相应的更新为相同的数据。 这个问题在很多前端面试中,会提及。面试官问你,vue的双向数据绑定原理是什么?当然,这个也是耳熟能详的问题,百度随便一搜索,到处都能找到答案。 一般都会搜索到,是用Object.defineProperty( ) ,来监听数据get和set,来实现数据劫持的。 假如对Object.defineProperty( )不是很了解,可以点击上面链接,看看其语法! 举个简单的例子: var blog = { name: 'haorooms博客' }; console.log(blog.name); // haorooms博客 如果想要在执行console.log(blog.name)的同时,直接给haorooms博客加个书名号,那要怎么处理呢?或者说要通过什么监听对象 blog的属性值。这时候Object.defineProperty( )就派上用场了,代码如下: var blog= {} var name = ''; Object.defineProperty(blog, 'name', { set: function (value) { name = value; console.log('欢迎来到' + value); }, get: function () { return '《' + name + '》' } }) blog.name = 'haorooms博客'; // 欢迎来到haorooms博客 console.log(blog.name); // 《haorooms博客》 上面代码执行一下,可以查看效果! 关于 vue的双向数据绑定,具体如何实现的?网上也有很多实现的代码,这里就不多累赘了! v-model 的使用 上面开了一个小差,讲了那么多,其实就是为了说明Vue 是单项数据流,v-model 只是语法糖而已。 <input v-model="haorooms" /> <input v-bind:value="haorooms" v-on:input="haorooms= $event.target.value" /> 第一行的代码其实只是第二行的语法糖。然后第二行代码还能简写成这样: <input :value="haorooms" @input="haorooms= $event.target.value" /> 也就是说, <input v-model="haorooms" /> 也可以写成 <input :value="haorooms" @input="haorooms= $event.target.value" /> v-model在组件上的使用 回到我们一开始的疑问了?vue中v-model如何进行父子组件的通信?如何在组件中使用呢?假如你理解了我上面的例子,那么,我们就可以很简单的在组件中使用v-model了。 父组件代码如下: <template> <div id="demo"> <test-model v-model="haorooms"></test-model> <span>{{haorooms}}</span> </div> </template> <script> import testModel from 'src/components/testModel' export default { data(){ return{ haorooms: "haorooms" } }, components: { testModel, } } </script> <style lang="scss" scoped> </style> 子组件代码如下: <template> <span> <input ref="input" :value="value" @input="$emit('balabala', $event.target.value)" > </span> </template> <script> export default { data(){ return{ } }, props: ["value"], model: { prop: 'value', event: 'balabala' } } </script> <style lang="scss" scoped> </style> 我们可以通过上面代码,子组件修改父组件v-model绑定的值! 实现截图如下: v-model 的缺点和解决办法 在创建类似复选框或者单选框的常见组件时,v-model就不好用了。 <input type="checkbox" v-model="haorooms" /> 我们可以用如下方式解决: <input type="checkbox" :checked="status" @change="status = $event.target.checked" /> 父组件可以如下写: <my-checkbox v-model="haorooms"></my-checkbox> 子组件: <input type="checkbox" <!--这里就不用 input 了,而是 balabala--> @change="$emit('balabala', $event.target.checked)" :checked="value" /> export default { data(){ return{ } }, props: ['checked'], //这里就不用 value 了,而是 checked model: { prop: 'checked', event: 'balabala' }, } 关于vue的v-model就写到这里。 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持www.zgxue.com防采集请勿采集本网。

vue中我们常常用到组件. 那么组件总体可以分为如下的几种关系.

vue2.0父子组件以及非父子组件如何通信 1.父组件传递数据给子组件 父组件数据如何 2.子组件与父组件通信 那么,如果子组件想要改变数据呢?这在vue中是不允许的,因为vu

父子组件, 爷孙组件, 兄弟组件. 这几种组件之间是如何通信的呢?

与 $on 来进行组件之间的数据传输. 主要的传输方式有三种: 1.父组件到子组件通信 2.子 通信 一、父组件传值给子组件 父组件给子组件传子,使用props //父组件:parent.vue <t

父子组件通信

在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂,现就 , }) </script> 总结:Vue中关于组件间及组件与根节点间通信都可以人为是父子兄弟间

根据vue中的文档可知, 组件的props属性用于接收父组件传递的信息. 而子组件想要向父组件传递信息, 可以使用$emit事件.

前言 在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂 组件通讯包括:父子组件间的通信和兄弟组件间的通信。在组件化系统构建中,组件间通

我们定义两个组件, 一个为父组件名为father, 另外一个为子组件child. 子组件通过props属性接收父组件传递的值, 这个值为fname, 是父组件的名字. 点击子组件的按钮, 触发toFather事件, 向父组件传递消息. 父组件做出相应的反应.

面试官:Vue 中父子组件通信有哪些方式? 自己先想一分钟。 无可否认,现在无论大厂还是小厂都已经用上了Vue.js 框架,简单易上手不说,教程详尽,社区活跃,第三方套件还多。真

将父组件和子组件放入名为app的vue实例中

父子组件之间的通信 1)props和$emit 父组件通过props将数据下发给props,子组件通过 ``` 祖先组件和其子孙组件通信 1)provide/inject provide/inject,允许一个祖先组件向其所

Vue.component('child', { props: ['fname'], template: ` <div class="child"> 这是儿子, 我爸爸是{{fname}} <button @click="$emit('toFather')">点我通知爸爸</button> </div> `})Vue.component('father', { data() { return { info: '无消息' } }, template: ` <div class="father"> 这是父亲, {{info}} <child fname="father" @toFather="getSonMsg"></child> </div> `, methods: { getSonMsg() { this.info = '我收到儿子传来的消息了' } }})new Vue({ el: '#app',})

现在讲讲父子组件通信 父组件向子组件传值 父组件 html <div> <NotFound v- 您可能感兴趣的文章:Vue实现的父组件向子组件传值功能示例详解VUE里子组件如何获

注意上面的组件定义顺序不能换

对象数组的本质是数组,数组里面存储的数据类型是某个类的对象。 而数组对象的本质是对象,也就是一个数组对象,也就是一个数组,这个数组里面存储的数据类型可以使各种各

让后我们在html文件中写入即可

nbsp;父子组件通信 上面讲到的 props 其实就是父组件向子组件传递消息的一种方式。 在子组件中有一个 this.$parent 和 this.$root 可以用来方法父组件和根实例。不过,现在我

<div id="app"> <father></father> </div>

父组件是使用 props 传递数据给子组件,但子组件怎么跟父组件通信呢?这个时候 Vue 的 详解vuejs2.0子组件改变父组件的数据实例详解vue父子组件间传值(props)vue父组件向

点击按钮后发现我们的父组件发生了变化

您可能感兴趣的文章:vue实现父子组件之间的通信以及兄弟组件的通信功能示例Vue实现的父组件向子组件传值功能示例Vue.js子组件向父组件通信的方法实例代码详解详解vu

点击这里可以查看效果

组件通信的示例代码vue中的$emit 与$on父子组件与兄弟组件的之间通信方式vue2.0组件之间传值、通信的多种方式(干货)Vue组件通信的四种方式汇总详解vue组件通信的三种

爷孙组件通信

您可能感兴趣的文章:vue父组件向子组件动态传值的两种方法浅谈Vue父子组件和非父子组件传值问题Vue中父组件向子组件通信的方法vue2.0 父组件给子组件传递数据的方法

因为vue只是说明了父子组件如何通信, 那么爷孙组件是没有办法直接通信的. 但是它们可以分解为两个父子组件通信.

子组件改变props值,并向父组件传值的方法详解vue父子组件间传值(props)vue之父子组件间通信实例讲解(props、$ref、$emit)vue组件中使用props传递数据的实例详解vue父组

即爷爷和父亲看成是一个父子组件, 而父亲和孙子看成是一个父子组件. 这样它们之间就可以进行通信了. 通过父亲组件合格桥梁, 可以实现爷孙的通信. (注意: 爷孙组件是无法直接通信的)

父子组件之间的通信方法详解Vue 非父子组件通信方法(非Vuex)深入探讨Vue.js组件和组件通信vue.js入门(3)——详解组件通信详解vue组件通信的三种方式详解vue跨组件通信

兄弟组件通信

兄弟组件通信即组件之间通信. 这就要用到观察者模式了. 因为vue实例的原型全部来自Vue.prototype. 那么我们就可以了将事件中心绑定到Vue.prototype的某个属性上, 暂且叫它为bus吧.

let bus = new Vue()

Vue.prototype.bus = bus

我们再定义两个组件, up组件和down组件, 当点击down组件中的按钮时, 会给up组件传递信息.

Vue.component('up', { data() { return { msg: '未传递消息' } }, template: ` <div class="up"> <p>这是up组件, 下一行为down传递的消息</p> <p>{{msg}}</p> </div> `, mounted() { this.bus.$on('send', (msg)=> { this.msg = (msg) }) }})Vue.component('down', { template: ` <div class="down"> <p>这是down</p> <button @click="toUp">点击我向up组件传递消息</button> </div> `, methods: { toUp() { this.bus.$emit('send', 'down来消息了') } }})new Vue({ el: '#app',})

并且将两个组件放入名为app的实例中

<div id="app"> <up></up> <down></down> </div>

按钮被点击后, up组件会接收到消息

点击这里查看源代码

以上这篇vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持真格学网。

组件是Vue核心的一块内容,组件之间的通信也是很基本的开发需求。组件通信又包括父组件向子组件传数据,子组件向父组件传数据,非父子组件间的通信。前两种通信Vue的文档都说的很清楚,但是第三种文档上确只有下面的几句 具体如何去实现却没有很详细的说明,于是自己试着进行了实现。先看下简单的通信效果: 就是点击了一个组件,另一个组件的数字递加。 html如下: <div id="app"> <component-a></component-a> <component-b></component-b> </div> 再来看一下如何实现每一个组件: var bus = new Vue() //首先建立一个空的Vue实例作为事件的中转 Vue.component('component-a',{ template: `<div><button @click="incrementB">{{masgA}}</button></div>`, //添加点击事件incrementB ,因为点击A需要增加B data () { return { masgA : 0 } }, methods: { incrementB: function () { //增加B的事件 bus.$emit('incrementB') //中转站bus 触发incrementB事件 } }, mounted: function () { var _this = this bus.$on('incrementA',function(){ //中转站bus自定义increamentA事件用来增加msgA,这个事件最终由组件B进行触发 _this.masgA ++ })        //bus.$on('incrementA',()=>{ //这里也可以用箭头函数,就不会有_this这个变量了,因为箭头函数不会改变this指向        // this.masgA ++        //}) } }) 从上面的代码可以看出真正的改变方法是通过bus里注册监听事件来实现的,同理代component-b也是一样 Vue.component('component-b',{ template: `<div><button @click="incrementA">{{masgB}}</button></div>`, data () { return { masgB : 0 } }, methods: { incrementA: function () { bus.$emit('incrementA') } }, mounted: function(){ bus.$on('incrementB',() => { this.masgB ++ }) } }) 完整代码如下,可直接复制运行 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>非父子组件通信</title> </head> <body> <div id="app"> <component-a></component-a> <component-b></component-b> </div> <script src="https://unpkg.com/vue/dist/vue.js"></script> </body> <script> var bus = new Vue() //首先建立一个空的Vue实例作为事件的中转 Vue.component('component-a',{ template: `<div><button @click="incrementB">{{masgA}}</button></div>`, //添加点击事件 data () { return { masgA : 0 } }, methods: { incrementB: function () { bus.$emit('incrementB') } }, mounted: function () { var _this = this bus.$on('incrementA',function(){ _this.masgA ++ }) bus.$on('incrementA',()=>{ this.masgA ++ }) } }) Vue.component('component-b',{ template: `<div><button @click="incrementA">{{masgB}}</button></div>`, data () { return { masgB : 0 } }, methods: { incrementA: function () { bus.$emit('incrementA') } }, mounted: function(){ bus.$on('incrementB',() => { this.masgB ++ }) } }) var vm = new Vue({ el: "#app" }) </script> 同时也可以看出这么做仅有两个组件就有些麻烦,事件的流向不是很清晰,所以在出现复杂的场景时需要使用VueX进行管理。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • vue之父子组件间通信实例讲解(props、$ref、$emit)
  • vue中组件通信的八种方式(值得收藏!)
  • vue中父子组件传值,解决钩子函数mounted只运行一次的操作
  • vue中子组件调用兄弟组件方法
  • vue.js入门(3)——详解组件通信
  • 详解vue 2.0封装axios笔记
  • 深入理解vue路由的使用
  • 浅谈vuex的状态管理(全家桶)
  • 基于vue-upload-component封装一个图片上传组件的示例
  • vue和iview实现scroll 数据无限滚动功能
  • vue template中slot-scope/scope的使用方法
  • 解决vue 项目打包后favicon无法正常显示的问题
  • 详解如何使用vue-cli脚手架搭建vue.js项目
  • vue.js引入外部css样式和外部js文件的方法
  • 解决vue项目打包后打开index.html页面显示空白以及图片路径错误的
  • Vue非父子组件通信详解
  • vue项目中v-model父子组件通信的实现详解
  • 使用Vue父子组件通信实现todolist的功能示例代码
  • vue.js单文件组件中非父子组件的传值实例
  • 详解vue.js2.0父组件点击触发子组件方法
  • vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
  • 详解vue2.0组件通信各种情况总结与实例分析
  • 详解Vue2中组件间通信的解决全方案
  • Vue.js 父子组件通信的十种方式
  • 详解Vue组件之间通信的七种方式
  • vue父组件触发事件改变子组件的值的方法实例详解
  • vue父子组件的通信对象和数组有什么区别
  • 深入探讨Vue.js组件和组件通信
  • vue2.0 子组件改变props值,并向父组件传值的方法
  • vue中子组件传递数据给父组件的讲解
  • vue通信方式EventBus的实现代码详解
  • vue 子组件向父组件传值方法
  • 解决vue组件props传值对象获取不到的问题
  • Vue组件通信的四种方式汇总
  • 浅谈Vue2.0父子组件间事件派发机制
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全yui.ext相关prototypejqueryangularjsjsonlib_jsjs面向对象extjsmootoolsseajsdojovue.jsbackbone.js其它首页javascriptjavascript类库vue之父子组件间通信实例讲解(props、$ref、$emit)vue中组件通信的八种方式(值得收藏!)vue中父子组件传值,解决钩子函数mounted只运行一次的操作vue中子组件调用兄弟组件方法vue.js入门(3)——详解组件通信详解vue 2.0封装axios笔记深入理解vue路由的使用浅谈vuex的状态管理(全家桶)基于vue-upload-component封装一个图片上传组件的示例vue和iview实现scroll 数据无限滚动功能vue template中slot-scope/scope的使用方法解决vue 项目打包后favicon无法正常显示的问题详解如何使用vue-cli脚手架搭建vue.js项目vue.js引入外部css样式和外部js文件的方法vue引用js文件的多种方式(推荐)vue之父子组件间通信实例讲解(pr简单理解vue中props属性vue props用法详解(小结)vue元素的隐藏和显示(v-show指令vue.js常用指令汇总(v-if、v-fovue 进阶教程之v-model详解使用vue实现图片上传的三种方式vue.js实战之利用vue-router实现vue实现文件上传功能动态加载权限管理模块中的vue组件详解vue开发中调用微信jssdk的问题elementui select组件value值注意事项详解关于vue-resource报错450的解决方案vue.js移动端app实战1:初始配置详解vue-cli webpack2项目打包优化分享浅谈vue初学之props的驼峰命名vue cli使用融云实现聊天功能的实例代码vue.js基础学习之class与样式绑定基于vue的spa动态修改页面title的方法(推
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved