vue教程-父组件向子组件传递数据(传递静态props)

提出问题

在 vue教程:脚手架-创建第一个组件 中,UserInfo 组件的 值是不能改变的,这是 不合理 的:组件是为了 复用,那么该组件的值,是可以由 父组件修改的

在 App.vue(父组件),使用 2次 UserInfo.vue (子组件),但内容显示是不同的

效果如下图:

类似问题

如:饿了么UI中的按钮,按钮的值是可以由父组件改变的,见 链接

解决

通过 父组件向子组件传递数据 实现的,父组件通过 属性 传入数据,子组件通过 props 接收

修改 UserInfo.vue

<template>
    <div id="app">
        <div>昵称:{{name}}</div>
        <div>性别:{{sex}}</div>
        <div>年龄:{{age}}</div>
    </div>
</template>
<script>
export default {
    // data:function(){//这里不用data,所以注释掉
    //     return {
    //         name:'李雷',
    //         sex:'男',
    //         age:20
    //     }
    // }
    props:['name','sex','age']//定义子组件时,需要指定 props,表示父组件要传入数据

}
</script>
<style scoped>
#app{
    border: red 1px solid;
}
</style>

注意: props 中的值,推荐 短横线分隔命名,不推荐驼峰命名,因为在html中 不区分大小写

修改 App.vue

静态方式传值,像自定义标签属性,代码如下:

<template>
<!-- 模板 -->
  <div id="app">
    使用UserInfo 组件(成对标签),静态方式传值:
    <user-info name="李雷" sex="男" age="20"></user-info>
    ------------------------------<br>
    ------------------------------<br>
    使用UserInfo 组件(单独一个标签),静态方式传值:
    <user-info name="韩梅梅" sex="女" age="21"/>
  </div>
</template>

<script>
//引入 UserInfo 组件
import UserInfo from './components/UserInfo'

export default {
  name: 'App',
  components: {
    'user-info':UserInfo //注册局部组件
  }
}
</script>

总结

传递静态Prop

像下面这种代码:

<user-info name="李雷" sex="男" age="20"></user-info>

通过 标签属性 传递的数据,都是 字符串 类型,叫 传递静态Prop

缺点

涉及到类型计算时,就会出现错误,代码如下:

<template>
    <div id="app">
        <div>昵称:{{name}}</div>
        <div>性别:{{sex}}</div>
        <div>年龄:{{age+1}} 关键:年龄加1</div>
    </div>
</template>
<script>
export default {
    // data:function(){
    //     return {
    //         name:'李雷',
    //         sex:'男',
    //         age:20
    //     }
    // }
    props:['name','sex','age']//定义子组件时,需要指定 props ,作用是给组件定义属性,表示父组件要传入数据

}
</script>
<style scoped>
#app{
    border: red 1px solid;
}
</style>

结果

由于传入的 age 是 字符串 类型的 20,所以 {{age+1}} 表达式认为是 字符串拼接,页面显示 201,如下图:

解决

使用 传递动态Prop


原文出处:/show_1IX2j0Or9Px0.html