vue---父子传值:props与this.$emit()

目录

1、prop父传子

2、prop属性校验

 3、$emit子传父


1、prop父传子

在vue中,属性props用来实现将父组件的数据传递给子组件。当父组件的属性变化时,将传递给子组件。

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。

prop是我们约定从父组件向子组件传参的一个接口,   我们可以通过prop 从父组件向子组件传递参数。在子组件里面 我们定义的prop是用小驼峰(props:["topTitle"])来命名的,而在传递参数的时候是用烤串(如:top-title)方式来命名的,因为html是大小写不敏感的,所以我们约定在模板里面始终是用烤串方式。

以下通过示例展示:

两个子组件【PageOne.vue】【PageTwo.vue】分别通过属性props访问父组件【App.vue】的数据。

在【App.vue】中,导入子组件并在template中渲染,并绑定data中的数据。

绑定数据:【v-bind:infos="informations"】

<template>
  <div id="app">
    <page-one v-bind:infos="informations"></page-one>
    <page-two v-bind:infos="informations"></page-two>
  </div>
</template>

<script>
import PageOne from "./components/PageOne";
import PageTwo from "./components/PageTwo";

export default {
  name: "App",
  data() {
    return {
      informations: [
        { name: "Lucy", age: 18 },
        { name: "Mike", age: 19 },
        { name: "Stanfen", age: 22 },
        { name: "Alice", age: 30 }
      ]
    };
  },
  components: {
    "page-one": PageOne,
    "page-two": PageTwo
  }
};
</script>

在子组件【PageOne.vue】【PageTwo.vue】中通过属性【props】传递父组件的数据:【props: ["infos"]】

<template>
  <div class="page-one">
    <h3>组件1【props】属性传值- 调用父组件数据</h3>
    <ul>
      <li v-for="info in infos" :key="info">
        <span>{{info.name}}</span>
        <span>{{info.age}}</span>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "page-one",
  props: ["infos"],
  data() {
    return {};
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.page-one {
  background: rgba(236, 236, 115, 0.788);
  width: 600px;
  margin: 10px auto;
}
ul li {
  line-height: 30px;
}
</style>

2、prop属性校验

Vue 中的 Prop 还提供了强大的类型检查 和 校验机制, 这个机制不仅提供了一个单文件组件的文档,也帮助后续使用和维护这个组件的同学更好地理解和使用。

 3、$emit子传父

this.$emit('事件',参数)

父组件通过prop向子组件传递数据,子组件可以通过调用内建的 $emit 方法 来触发一个事件,第一个参数为事件名,第二个参数为传递的值,并同时在父组件上通过v-on指令监听事件

在子组件里面通过点击去触发事件去通知父组件修改msg,父组件修改了msg后,响应式地通过prop将最新的msg值传递给子组件,vue.js 就是通过这样一种形式来在父子组件中保持双向绑定的。 Vue.js 还提供了 .sync 修饰符  来为这种模式提供一个缩写。

总结:

vue是单向数据流的。父组件可以通过prop向子组件传递数据。子组件需要通过自定义事件来将自己的数据变更通知给父组件,我们可以通过约定一个prop和event的范式在vue中实现双向绑定,这个便是.sync修饰符

.sync修饰符的双向绑定是通过 v-bind: msg 和 v-on:update:msg 这种约定来实现。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值