vue中emit的使用方法,vue中prop的用法

  vue中emit的使用方法,vue中prop的用法

  本文主要介绍了vue的prop和$emit的使用说明,有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。

  

目录

   Prop和$emit的用法。1.vue组件Prop传输数据。2.子组件可以使用$emit来触发父组件的自定义事件。今天的坑——这个。$ emit我的实现方法效果问题在这里,问题解决了。

  

prop与$emit的用法

  

1.vue组件Prop传递数据

  实例的作用域是隔离的,这意味着父组件的数据不能在子组件的模板中直接引用。如果希望子组件使用父组件的数据,需要使用子组件的prop选项。Prop是单向绑定。当父组件的属性改变时,它将被传递到子组件,但反过来。这主要是为了防止子组件无意中修改父组件的状态;每次更新父组件时,子组件的所有属性都会更新为最新值。这意味着您不能在子组件中更改属性。

  

2.子组件可以使用$emit触发父组件的自定义事件

  Vm。$emit( event,arg):发送数据。第一个参数是发送数据的名称,接收时也用这个参数接收。第二个参数是这个数据的当前位置,拓展:

  Vm。$on( event,fn):接收数据。第一个参数是数据的名称,它对应于数据发送时的名称。第二个参数是一个方法,需要对数据进行操作。注意:vue模板只能有一个根对象(只能用一个标签来包装模板中的所有元素),否则会报告如下错误:

  组件模板应该只包含一个根元素。如果您在多个元素上使用v-if,请使用v-else-if来链接它们。

  父组件:

  模板

  差异

  添加名称:{{addrname}}/div的父组件的div

  child-prop @ showAddrName= updateAddrName :send data= addrName /child-prop

  /div

  /模板

  脚本

  从导入childProp。/child prop ;

  导出默认值{

  名称:“索引”,

  组件:{childProp},

  data () {

  返回{

  AddrName:“北京”

  }

  },

  方法:{

  UpdateAddrName(data){//触发子组件城市选择-城市选择的事件。

  console.log(数据);

  this . addrname=data . addrname;//更改了父组件的值

  console . log( to city: this . addrname)

  }

  }

  }

  /脚本

  子组件:

  模板

  差异

  从父组件传递到子组件的H3地址名称:{{senddata}}/H3

  br/button @ Click= addr(` Shanghai `) 单击此处将 Shanghai 启动到父组件/button

  /div

  /模板

  脚本

  导出默认值{

  名称:“儿童道具”,

  Props:[sendData],//用于接收父组件到子组件的数据。

  方法:{

  地址(值){

  let data={

  地址:瓦尔

  };

  这个。$emit(showAddrName ,data);//触发//select事件后,会自动触发showCityName事件。

  }

  }

  }

  /脚本

  

今天遇到的坑--this.$emit

  写给赶时间的人

  简言之

  这个。$emit(xxx ,input),输入最好是字符串。如果您需要传递一个对象,那么,建议您将它放在父组件JSON.parse(input)中,或者不传递原始对象。您需要const作为对象,并对需要传递的对象进行深层复制。

  写给有点时间看的人

  作为一个半路出家的伪前端,遇到坑,基本是因为基础知识不扎实。比如我就遇到了这个这个的坑。$emit today。

  需求

  一个简单的要求,页面上方有一个搜索框,需要填写2个字段,按OK即可搜索。

  实现

  我也这么认为填写两个字段,然后我将它们写在一个对象中。当这个。$emit,只传递这个对象的值。

  

我的实现方法

  搜索组件

  模板

  差异

  div搜索/div

  输入类型= text v-model= search key . key _ apple

  输入类型= text v-model= search key . key _ blackBerry

  按钮@click=onSubmit 确定/按钮

  /div

  /模板

  脚本

  导出默认值{

  data() {

  返回{

  搜索关键字:{

  key_blackBerry: ,

  key_apple:“”

  }

  };

  },

  方法:{

  onSubmit() {

  这个。$emit(onSearchSubmit ,this . search key);

  }

  }

  };

  /脚本

  父组件:

  模板

  section class=container

  差异

  search @ onSearchSubmit= onSearchSubmit /

  h1{{parent_search}}/h1

  /div

  /部分

  /模板

  脚本

  从“~/components/Search.vue”导入搜索;

  导出默认值{

  组件:{

  搜索

  },

  data() {

  返回{

  parent_search: {}

  };

  },

  方法:{

  onSearchSubmit(输入){

  this.parent_search=输入;

  }

  }

  };

  /脚本

  

效果

  其实可以满足要求。但是,有一个意想不到的结果:第一次点击确定后,我们在搜索框中输入。预期的结果是什么都不改变,例如,h1中的字符不会改变。然而,事实证明,双向绑定并不是我想要的.没有实现父子组件的双向绑定(比如通过复制组件的change方法)。

  

问题来了,问题解决

  原因是我写的这个组件。$emit是一个对象,但它的地址实际上是被传输的。

  所以,以后像这样重写子组件是可以的。

  模板

  差异

  div搜索/div

  输入类型= text v-model= search key . key _ apple

  输入类型= text v-model= search key . key _ blackBerry

  按钮@click=onSubmit 确定/按钮

  /div

  /模板

  脚本

  导出默认值{

  data() {

  返回{

  搜索关键字:{

  key_blackBerry: ,

  key_apple:“”

  }

  };

  },

  方法:{

  onSubmit() {

  const input=JSON . parse(JSON . stringify(this . search key));

  这个。$emit(onSearchSubmit ,输入);

  }

  }

  };

  /脚本

  基础真的很重要~

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

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

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