使用props传递数据

  • props是组件的一个属性 属性值加双引号

  • 组件通过props属性向外部传值

  • props down, event up

语法

// html
<my-component val='首页'></my-component>

// js
Vue.component('my-component',{
    template:'<div>html结构</div>',
    props:['val']
})

基本用法

<div id="app">
    <child message="hello!"></child>
</div>

<script>
// 注册
Vue.component('child', {
  // 声明 props
  props: ['message'],
  // 同样也可以在 vm 实例中像 “this.message” 这样使用
  template: '<span>{{ message }}</span>'
})
// 创建根实例
new Vue({
  el: '#app'
})
</script>
</body>

案例1 父组件将数据动态传给子组件

  • 用 v-bind 动态绑定 props 的值到父组件的数据中
  • 每当父组件的数据变化时, 该变化也会传导给子组件
<div id="app">
    <div>
      <input v-model="parentMsg">
      <child v-bind:message="parentMsg"></child>
    </div>
</div>

<script>
// 注册
Vue.component('child', {
  // 声明 props
  props: ['message'],
  // 同样也可以在 vm 实例中像 “this.message” 这样使用
  template: '<span>{{ message }}</span>'
})

var vm = new Vue({
  el: '#app',
  data: {
    parentMsg: '父组件内容'
  }
})
</script>

案例2 自定义todolist组件

  • v-bind 指令将 todo 传到每一个重复的组件中
<div id="app">
    <ol>
    <todo-list v-for="item in tasks" v-bind:todo="item"></todo-list>
      </ol>
</div>

<script>
// 注册组件
Vue.component("todo-list", {
  props: ["todo"],
  template: "<li>{{ todo.text }}</li>"
});

var vm = new Vue({
  el: "#app",
  data: {
    tasks: [
      { text: "吃饭", pro: 0, completed: false },
      { text: "睡觉", pro: 0, completed: false },
      { text: "打豆豆", pro: 0, completed: false }
    ]
  }
});
</script>

使用总结:

  • 如果props中的值使用驼峰命名法命名,在html结构中需将其转化为用 " - " 链接;

  • 通过props得到的变量不能进行修改

results matching ""

    No results matching ""