vue中传值的方式,vue通信、传值的多种方式(详细)

  vue中传值的方式,vue通信、传值的多种方式(详细)

  本文主要介绍了vue值传递的十二种方法的总结,并通过实例代码进行了详细介绍。对大家的学习或工作都有一定的参考价值。有需要的朋友下面和边肖一起学习。

  

目录

   I .通过世代相传II。从儿子传给父亲。兄弟组件之间的通信(总线)IV。ref/refs(父子元件之间的通信)与Vuex通信VI。$parent VII。会话存储传输值VIII。路由传输值IX。祖孙$attrs X .孙传祖用$听众XI。承诺传输参数XII。

  

一.父传子传递

  (1)在父组件的子组件的标签上绑定一个属性,挂载要传输的变量。

  (2)通过子组件中的props接收数据,可以是数组,也可以是对象。接收到的数据可以直接用props:[" property name "]props:{ property name:data type }代码示例:

  //父组件

  模板

  差异

  I父组件/i

  !-页面使用-

  son :data=name/son

  /div

  /模板

  脚本

  从导入儿子。/son . vue ;//导入父组件

  导出默认值{

  组件:{son },//注册组件

  名称:“父组件”,

  data() {

  返回{

  名称:“Frazier”,//父组件定义变量

  };

  },

  };

  /脚本

  //子组件

  模板

  div{{data}}/div

  /模板

  脚本

  导出默认值{

  组件:{ },

  名称:“子组件”,

  道具:[数据],

  };

  /脚本

  

二.子传父传递

  (1)在父组件的子组件标签上自定义一个事件,然后调用所需的方法。

  (2)父组件中定义的事件由此触发。$emit ("event ")在子组件的方法中,数据作为参数代码示例:传递

  //父组件

  模板

  差异

  I父组件/i

  !-页面使用-

  Son @lcclick=lcclick/son//自定义活动

  /div

  /模板

  脚本

  从导入儿子。/son . vue ;//导入父组件

  导出默认值{

  组件:{son },//注册组件

  名称:“父组件”,

  data() {

  return { };

  },

  方法:{

  lcclick(){

  警报(“子到父”)

  }

  },

  };

  /脚本

  //子组件

  模板

  差异

  Button @click=lcalter 单击我/button

  /div

  /模板

  脚本

  导出默认值{

  组件:{ },

  名称:“子组件”,

  方法:{

  lcalter(){

  这个。$emit(lcclick)//通过emit触发事件

  }

  },

  };

  /脚本

  

三.兄弟组件通信(bus总线)

  (1)在src中新建一个Bus.js文件,然后导出一个空的vue实例。

  (2)数据传输方面,引入Bus.js,然后通过总线发送事件。e m i t("事件名称","参数")。数据由emit(“事件名”,“参数”)发送,数据由emit(“事件名”,“参数”)发送。数据是

  (3)在接收数据端引入Bus.js,然后传递Bus。$on("事件名称",(数据)={数据是接收的数据})

  图片示例:

  

四.ref/refs(父子组件通信)

  (1)如果1)ref用在普通DOM元素上,引用指向DOM元素;如果用在子组件上,引用指向组件实例,

  (2)可以直接调用组件的方法或者通过实例访问数据。也可以看作是子组件向父组件传递值的一种代码示例:

  //父组件

  模板

  差异

  button @click=说你好说你好/button

  child ref=childForRef/child

  /div

  /模板

  脚本

  从导入子级。/child.vue

  导出默认值{

  组件:{ child },

  data () {

  返回{

  childForRef: null,

  }

  },

  已安装(){

  this.childForRef=this。$ refs.childForRef

  console . log(this . child forref . name);

  },

  方法:{

  说你好(){

  this.childForRef.sayHello()

  }

  }

  }

  /脚本

  //子组件

  模板

  divchild /div的内容

  /模板

  脚本

  导出默认值{

  data () {

  返回{

  姓名:“我是孩子”,

  }

  },

  方法:{

  说你好(){

  console . log( hello );

  alert( hello );

  }

  }

  }

  /脚本

  

五.Vuex通信

  组件被分派给动作,动作是异步操作,然后动作被提交给突变,突变通过逻辑操作改变状态,从而同步到组件并更新其数据状态代码示例:

  //父组件

  模板

  div id=应用程序

  儿童A/

  儿童B/

  /div

  /模板

  脚本

  从导入。/child a //导入组件

  从导入ChildB。/ChildB //导入B组件

  导出默认值{

  组件:{ChildA,ChildB} //注册组件

  }

  /脚本

  //子组件a

  模板

  div id=childA

  H1我是组件a /h1。

  我让组件B接收数据/按钮

  由于p单击了B,信息发生了变化:{{BMessage}}/p

  /div

  /模板

  脚本

  导出默认值{

  data() {

  返回{

  a消息:“你好,组件b,我是组件a”

  }

  },

  计算值:{

  BMessage() {

  //从商店中获取的组件B的数据存储在这里。

  归还这个。$store.state.BMsg

  }

  },

  方法:{

  转换(){

  //触发receiveAMsg将组件a的数据存储到存储中。

  这个。$store.commit(receiveAMsg ,{

  AMsg:这个。信息

  })

  }

  }

  }

  /脚本

  //子组件B

  模板

  div id=childB

  H1我是b /h1成分。

  我让组件A接收数据/按钮

  p点击了A,我的信息发生了变化:{{AMessage}}/p

  /div

  /模板

  脚本

  导出默认值{

  data() {

  返回{

  b消息:“你好,组件a,我是组件b”

  }

  },

  计算值:{

  AMessage() {

  //从存储中获取的组件A的数据存储在这里。

  归还这个。$store.state.AMsg

  }

  },

  方法:{

  转换(){

  //触发receiveBMsg将组件b的数据存储到存储中。

  这个。$store.commit(receiveBMsg ,{

  BMsg:这个。b消息

  })

  }

  }

  }

  /脚本

  //vuex

  从“vue”导入Vue

  从“vuex”导入Vuex

  Vue.use(Vuex)

  常量状态={

  AMsg: ,

  BMsg:“”

  }

  常量突变={

  receiveAMsg(状态,有效负载){

  //存储状态A组件的数据

  状态。AMsg=有效载荷。窝前斜面内侧

  },

  receiveBMsg(状态,有效负载){

  //存储状态B组件的数据

  状态。BMsg=有效负载。凸轮限位装置

  }

  }

  导出默认的新Vuex。商店({

  状态,

  突变

  })

  

六.$parent

  Parent可以获取父组件实例,但然后通过该实例访问父组件的属性和方法。它还有一个兄弟父组件,可以获取父组件实例,然后通过该实例访问父组件的属性和方法。它还有一个兄弟根,可以获得根组件实例。代码示例:

  //获取父组件的数据

  这个。$parent.foo

  //写入父组件的数据

  这个。$parent.foo=2

  //访问父组件的计算属性

  这个。$parent.bar

  //调用父组件的方法

  这个。$parent.baz()

  //在子组件传递给父组件的例子中,可以使用这个。$parent.getNum(100)将值传递给父组件。

  

七.sessionStorage传值

  SessionStorage是浏览器的全局对象,关闭页面时会清除其中存储的数据。有了这个功能,我们可以在所有页面上共享一个数据。代码示例:

  //将数据保存到会话存储

  sessionStorage.setItem(key , value );

  //从sessionStorage获取数据

  let data=session storage . getitem( key );

  //从sessionStorage中删除保存的数据

  session storage . remove item( key );

  //从sessionStorage中删除所有保存的数据

  session storage . clear();

  注意:它存储键值对,只能是字符串类型。如果要存储对象,需要使用Letobj=json.stringify (obj)将其转换为字符串后存储(使用时让obj=JSON.parse(objStr)将其解析为对象)。

  推荐一个库good-storage,封装了sessionStorage,可以直接用它的API存储对象。

  //本地存储

  storage.set(key,val)

  storage.get(key,def)

  //会话存储

  storage.session.set(key,val)

  storage.session.get(key,val)

  

八.路由传值

  使用问号传值

  A页面跳转B页面时使用这个r o u t e r p u s h(/B?n a m e=d a n s e e k ) B页面可以使用t h i s . router.push(/B?name=danseek) B页面可以使用这个router.push(/B?name=danseek)B页面可以使用this.route.query.name来获取A页面传过来的值

  上面要注意路由器和途径的区别使用冒号传值

  配置如下路由:

  {

  路径:"/b/:名称",

  姓名: b ,

  组件:()=导入( ./views/b . vue )

  },

  在B页面可以通过这个. route.params.name来获取路由传入的名字的值

  使用父子组件传值

  由于路由器视图本身也是一个组件,所以我们也可以使用父子组件传值方式传值,然后在对应的子页面里加上道具,因为类型更新后没有刷新路由,所以不能直接在子页面的安装好的钩子里直接获取最新类型的值,而要使用看

  路由器视图:type= type /路由器视图

  //子页面

  道具:[type]

  观察:{

  type(){

  //console.log(在这个方法可以时刻获取最新的数据:type=,this.type)

  },

  },

  

九.祖传孙 $attrs

  正常情况下需要借助父亲的小道具作为中间过渡,但是这样在父亲组件就会多了一些跟父组件业务无关的属性,耦合度高,借助$attrs可以简化些,而且祖跟孙都无需做修改祖组件:

  模板

  部分

  父母姓名=祖父母性别=男年龄=88 爱好=代码@ say know= say know /家长

  /部分

  /模板

  脚本

  从导入父级。/家长

  导出默认值{

  姓名:祖父母,

  组件:{

  父母

  },

  data() {

  返回{}

  },

  方法:{

  sayKnow(val){

  控制台。日志(瓦尔)

  }

  },

  已安装(){

  }

  }

  /脚本

  父组件

  模板

  部分

  p父组件收到/p

  p祖父的名字:{{name}}/p

  children v-bind= $ attrs v-on= $ listeners /children

  /部分

  /模板

  脚本

  从导入孩子。/儿童

  导出默认值{

  姓名:家长,

  组件:{

  孩子们

  },

  //父组件接收了姓名,所以名字值是不会传到子组件的

  道具:[名字],

  data() {

  返回{}

  },

  方法:{},

  已安装(){

  }

  }

  /脚本

  子组件

  模板

  部分

  p子组件收到/p

  p祖父的名字:{{name}}/p

  p祖父的性别:{{sex}}/p

  p祖父的年龄:{{age}}/p

  p祖父的爱好:{{hobby}}/p

  button @click=sayKnow 我知道啦/按钮

  /部分

  /模板

  脚本

  导出默认值{

  姓名:孩子,

  组件:{},

  //由于父组件已经接收了名字属性,所以名字不会传到子组件了

  道具:[性别,年龄,爱好,姓名],

  data() {

  返回{}

  },

  方法:{

  sayKnow(){

  这个. emit(sayKnow ,我知道啦)

  }

  },

  已安装(){

  }

  }

  /脚本

  

十.孙传祖使用$listeners

  文字内容同第九个

  祖组件

  模板

  div id=应用程序

  children-one @ event one= event one /children-one

  {{ msg }}

  /div

  /模板

  脚本

  从以下位置导入孩子./src/components/children.vue

  导出默认值{

  名称:"应用程序",

  组件:{

  儿童一号,

  },

  data() {

  返回{

  邮件:""

  }

  },

  方法:{

  eventOne(值){

  this.msg=值

  }

  }

  }

  /脚本

  父组件

  模板

  差异

  儿童-两个v-on= $ listeners /儿童-两个

  /div

  /模板

  脚本

  从导入两个孩子/childrenTwo.vue

  导出默认值{

  姓名:儿童一号,

  组件:{

  两个孩子

  }

  }

  /脚本

  子组件

  模板

  差异

  button @click=setMsg 点击传给祖父/按钮

  /div

  /模板

  脚本

  导出默认值{

  姓名:孩子,

  方法:{

  setMsg() {

  这个emit(eventOne , 123 )

  }

  }

  }

  /脚本

  

十一.promise传参

  承诺中分解如何传递多个参数

  //类似与这样使用,但实际上后面两个参数无法获取

  承诺=新承诺((解决,拒绝)={

  设a=1

  设b=2

  设c=3

  解决(甲、乙、丙)

  })

  promise.then((a,b,c)={

  console.log(a,b,c)

  })

  Resolve()只能接受和处理一个参数,多余的参数会被忽略。

  如果您想将数组或对象用于多个。数组

  承诺=新承诺((解决,拒绝)={

  解决([1,2,3])

  })

  promise.then((arr)={

  console.log(数组[0],数组[1],数组[2])

  })

  对象

  承诺=新承诺((解决,拒绝)={

  解决({a:1,b:2,c:3})

  })

  promise.then(obj={

  console.log(obj.a,obj.b,obj.c)

  })

  

十二.全局变量

  定义一个全局变量,将其直接赋给有价值的组件,并直接在所需的组件中使用。详情请看我的博客。

  只需点击博客链接,全局变量。

  关于vue价值传递的十二种方法的总结,本文到此为止。更多关于vue价值传递的信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

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

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