zoukankan      html  css  js  c++  java
  • vue的prop父子组件传值

    props down, events up

    父组件通过 props 向下传递数据给子组件;子组件通过 events 给父组件发送消息。

    静态 props

    要让子组件使用父组件的数据,需要通过子组件的 props 选项。给 childNode 添加一个 props 选项和需要的forChildMsg数据;

    var childNode = {
     template: `
      <div>
       {{forChildMsg}}
      </div>
      `,
     props: ["for-child-msg"]
    };
    props 声明的属性,在父组件的 template 模板代表子组件的地方,属性名需要使用中划线写法;
    子组件 props 属性声明时,使用小驼峰或者中划线写法都可以;而子组件的模板使用从父组件传来的变量时,需要使用对应的小驼峰写法
     

    动态 props

    在模板中,要动态地绑定父组件的数据到子组件模板的 props,和绑定 Html 标签特性一样,在父组件的template模板里使用v-bind绑定;

    <child :for-child-msg="childMsg2"></child>
     
    props 验证
    验证传入的 props 参数的数据规格,如果不符合数据规格,Vue 会发出警告。
    Vue.component("example", {
     props: {
     // 基础类型检测, null意味着任何类型都行
     propA: Number,
     // 多种类型
     propB: [String, Number],还可以在 props 定义的数据中加入自定义验证函数,当函数返回 false 时,输出警告。该函数命名是规定叫validator,自定义函数名不会生效。
    props: {
     "for-child-msg": {
      validator: function(value) {
      return value > 100;
      }
     }
    }
     
    单向数据流
    props 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。
     
    修改 props 数据
    定义一个局部变量,并用 prop 的值初始化它。但是由于定义的 ownChildMsg 只能接受 forChildMsg 的初始值,当父组件要传递的值变化发生时,ownChildMsg 无法收到更新。
    更加妥帖的方式是使用变量存储 prop 的初始值,并用 watch 来观察 prop 值得变化。发生变化时,更新变量的值。
     data() {
     return {
      ownChildMsg: this.forChildMsg
     };
     },
     watch: {
     forChildMsg() {
      this.ownChildMsg = this.forChildMsg;
     }
     }
     
    对于绝大多数特性来说,从外部提供给组件的值会替换掉组件内部设置好的值。所以如果传入 type="text" 就会替换掉 type="date" 并把它破坏!庆幸的是,class 和 style 特性会稍微智能一些,即两边的值会被合并起来,从而得到最终的值。
     
    如果你不希望组件的根元素继承特性,你可以在组件的选项中设置 inheritAttrs: false
  • 相关阅读:
    新功能:查看TrackBack过来的文章
    新功能发布: 数据备份
    小题大作:.Text中恶意脚本过滤的新方法
    新增关闭邮件通知功能
    Will Mono Become the Preferred Platform for Linux Development
    Test Driven Development 资源
    收藏夹注意事项
    功能调整:阅读排行、回复排行
    首页增加了到第二书店的链接
    DotGNU Portable.NET
  • 原文地址:https://www.cnblogs.com/icctuan/p/12085139.html
Copyright © 2011-2022 走看看