简答vue中的父组件与子组件进行通信有哪几种方式,vue3父子组件通信

  简答vue中的父组件与子组件进行通信有哪几种方式,vue3父子组件通信

  本文主要介绍了Vue组件的通信方式(父亲对儿子,儿子对父亲,兄弟对兄弟通信),具有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。

  

目录

  父组件向子组件传输,子组件向父组件传输值,非父子传输参数(事件总线)vue跨页双向通信同源通信非同源通信

  

父组件传到子组件

  父组件通过props属性与子组件通信。

  是单向数据流的父子(修改子组件中的道具数据无效,会有红色警告)。

  1. 父组件parent.vue代码如下:

  模板

  div class=parent

  h2{{ msg }}/h2

  儿子:fa-msg= msg /儿子!-子组件绑定faMsg变量,注意驼峰-

  /div

  /模板

  脚本

  从导入。/son //引入子组件

  导出默认值{

  名称:“HelloWorld”,

  data () {

  返回{

  消息:“父组件”,

  }

  },

  组件:{son},

  }

  /脚本

  2. 子组件son代码如下:

  模板

  儿子

  p{{ sonMsg }}/p

  Pcomponent收到的内容:{{ faMsg }}/p

  /div

  /模板

  脚本

  导出默认值{

  姓名:儿子,

  data(){

  返回{

  子:“子组件”,

  }

  },

  Props:[faMsg],//接收psMsg值

  }

  /脚本

  子组件通过props来接受数据

  第一个方法属性:[childCom]

  第二种方法道具:{

  ChildCom: String //在此指定字符串类型。如果类型不一致,将会警告您。

  }

  第三种方法道具:{

  childCom: {

  类型:字符串,

  默认:“司朝云”

  }

  }

  

子组件向父组件传值

  通过绑定事件传递值,然后$emit。

  Vue2.0只允许单向数据传输,我们通过离职事件来改变组件的数据。

  1.父组件parent代码如下:

  父组件通过绑定自定义事件接受子组件传递的参数。

  模板

  div class=parent

  h2{{ msg }}/h2

  p父组件继承的内容:{{ username }}/p

  Psmsg=我是你爸爸 @transfer=getUser/son

  !-侦听由子组件触发的传输事件,然后调用getUser方法-

  /div

  /模板

  脚本

  从导入儿子。/儿子

  导出默认值{

  名称:“HelloWorld”,

  data () {

  返回{

  消息:“父组件”,

  用户名:,

  }

  },

  组件:{son},

  方法:{

  getUser(消息){

  this .用户名=消息

  }

  }

  }

  /脚本

  2.子组件son代码如下:

  子组件通过$emit触发父组件上的自定义事件来发送参数。

  模板

  儿子

  p{{ sonMsg }}/p

  Pcomponent收到的内容:{{ psMsg }}/p

  !-input type= text v-model= user @ change= setUser --

  Button @click=setUser 传递值/button

  /div

  /模板

  脚本

  导出默认值{

  姓名:儿子,

  data(){

  返回{

  子:“子组件”,

  用户:“从子到父的内容”

  }

  },

  道具:[psMsg],

  方法:{

  setUser:function(){

  这个。$ emit (transfer ,this.user)//触发transfer方法,其中this . user是传递给父组件的数据。

  }

  }

  }

  /脚本

  

非父子传参 (事件总线)

  假设你有两个需要通信的Vue组件:A和B,组件A的按钮绑定了一个click事件,该事件发送消息,组件B接收消息。

  1. 初始化,全局创建$bus

  直接在项目的main.js中初始化$bus:

  //main.js

  窗户。$ bus=new Vue();

  注意,这个方法初始化一个全局事件总线。

  2. 发送事件

  $巴士。$emit(aMsg ,来自A页的消息);

  !- A.vue -

  模板

  button @ click= sendMsg()-/button

  /模板

  脚本

  //从导入$bus./bus . js ;

  导出默认值{

  方法:{

  sendMsg() {

  $巴士。$emit(aMsg ,来自A页的消息);

  }

  }

  };

  /脚本

  接下来,我们需要在页面b中接收这条消息。

  4. 接收事件

  $巴士。$on(事件名称,回调)

  !- IncrementCount.vue -

  模板

  p{{msg}}/p

  /模板

  脚本

  //从导入$bus./bus . js ;

  导出默认值{

  data(){

  返回{

  邮件:“”

  }

  },

  已安装(){

  $巴士。$on(aMsg ,(msg)={

  //已发送的消息

  this.msg=msg

  });

  }

  };

  /脚本

  下方是拓展,面试不必说

  Bus建议采用以下写法:

  集中式事件中间件是总线。我习惯于全球范围内定义公共汽车:

  app.js

  var eventBus={

  安装(Vue,选项){

  Vue.prototype.$bus=vue

  }

  };

  vue . use(eventBus);

  然后,在组件中,您可以使用$emit、$on和$off来分别分发、监视和取消监视事件:

  用于分发事件的组件

  //.

  方法:{

  todo: function () {

  这个。$巴士。$emit(todoSth ,params);//params是传递的参数。

  //.

  }

  }

  用于监控的组件

  //.

  已创建(){

  这个。$巴士。$ on (todos th ,(params)={//获取传递的参数并进行运算。

  //做某事

  })

  },

  //最好是在组件被破坏之前

  //清除事件监控

  销毁前(){

  这个。$巴士。$ off( tod osth );

  }

  如果需要监听多个组件,只需更改总线的eventName:

  //.

  已创建(){

  这个。$巴士。$on(firstTodo ,this . first todo);

  这个。$巴士。$on(secondTodo ,this . second todo);

  },

  //清除事件监控

  销毁前(){

  这个。$巴士。$off(firstTodo ,this . first todo);

  这个。$巴士。$off(secondTodo ,this . second todo);

  }

  

vue 跨页面双向通信

  

同源通信

  1. localStorage

  添加时间监控

  window . addevent listener( storage ,function(e){ });

  更改localStorage值并触发存储事件。

  window . local storage . setitem( params ,JSON . stringify(object));

  2. 通过跳转 url 传参

  //带参数的跳转路径

  3. 通过 BroadCast channel 广播实现通信

  //创建广播频道

  const bc=new BroadcastChannel(辛凯);

  //其他页面可以通过onmessage收听广播消息。

  bc.onmessage=function (res) {

  const data=res.data

  };

  //发送消息时直接调用实例上的postMessage方法。

  bc.postMessage(数据);

  4. shareWorker

  

非同源通讯

  1. iframe 嵌套

  1.发送消息

  window.postMessage(消息,目标来源,[传输])

  //要传输的消息数据[object]

  //目标窗口(URI),*表示任何窗口都可以无限制接收。

  //transfer是与message同时交付的一系列可转移对象。这些对象的所有权将转移到消息的接收者,发送者将不再保留所有权。

  2.监控收到的消息。

  window . addevent listener( message ,receiveMessage,false);

  //接收消息处理程序[$event]

  函数receiveMessage(事件){

  //参数事件

  //event.data是您传递的参数。

  //event.origin发送方用于安全验证的目标url。

  //event.source发送方的窗口对象

  }

  以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: