Vue 中的props

如果props始终获取不到传过来的值,考虑是否props写多了一个!!!!!!

<template>
  <div>
    {{propA_init}}-{{propA}}
  </div>
</template>

<script>
export default {
    components: {},
  
    props: {
        //必须是数字类型
          propA:Number,
          //必须是字符串或数字类型
          propB:[String,Number],
          //布尔值,如果没有定义,默认值是true
          propC:{
            type:Boolean,
            default:true
          },
          //数字,而且是必传
          propD:{
            type:Number,
            required:true
          },
          //如果是数组,默认值必须是一个函数来返回
          propE:{
            type:Array,
            default:()=>[]
          },
          //如果是对象,默认值必须是一个函数来返回。也可用箭头函数
          propF:{
            type:Object,
            default:function(){
                return {}
            }
          },
          //自定义一个验证函数
          propG:{
              validator:function (value){
                return value>10
             }
          }
    }
  data() {
    return {
      propA_init:this.propA
    };
  },
  mounted() {
    console.log(this.propA_init)
    console.log(this.propA)
  },
  methods:{
    this.propA_init="asdf"
  }
</script>

通常来说,父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。

  但是当父组件的传值是数组或者对象时,子组件中不仅能够直接修改,还不会报错,在子组件中改变这个对象或数组本身将会影响到父组件的状态

### Vue.js 中 `props` 对象的使用 在 Vue.js 中,组件之间的通信是一个重要概念。父组件可以向子组件传递数据,这通过 `props` 来完成。`props` 是一种自定义属性,在子组件内部被声明并接收来自父级的数据[^3]。 #### 声明 Props 为了使子组件能够接收到传入的信息,需要先在该组件内声明预期获取的 prop 属性名称: ```javascript // 子组件 MyComponent.vue 的 script 部分 export default { name: 'MyComponent', props: ['title', 'likes'] } ``` 上述代码片段展示了如何接受两个名为 `title` 和 `likes` 的 prop 参数。 #### 使用 Prop 数据 一旦声明了这些 prop 后,就可以像访问其他 JavaScript 变量一样轻松地在模板里或计算属性中使用它们: ```html <template> <div class="my-component"> <h2>{{ title }}</h2> <p>Likes: {{ likes }}</p> </div> </template> <script> export default { name: 'MyComponent', props: ['title', 'likes'], }; </script> ``` 这段 HTML 结合了之前提到过的脚本部分,用于展示由父组件传递过来的内容。 #### 父组件传递 Props 为了让子组件能实际获得所需信息,还需要让父组件负责设置具体的 prop 值: ```html <MyComponent :title="'Hello World'" :likes="100"></MyComponent> ``` 这里展示了怎样利用 v-bind (`:`) 将静态字符串 `'Hello World'` 或动态变量赋给子组件中的相应 prop 字段。 #### 完整示例 下面给出一个完整的父子组件交互的例子,其中包含了前面所描述的所有要点: ##### ParentComponent.vue (父组件) ```html <!-- 父组件 --> <template> <div id="app"> <child-component :message="parentMessage" /> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: "This is a message from the parent component." }; } }; </script> ``` ##### ChildComponent.vue (子组件) ```html <!-- 子组件 --> <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ["message"] }; </script> ``` 此案例说明了如何从父组件发送消息到子组件,并且后者成功渲染出了这条信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值