父组件向子组件传值

1、父组件向子组件传值的原因:

组件每次引用时,大体结构是一样的,但是有些数据是不一样。这个时候这些不同的数据就需要在引用组件的时候传递进来。

2、组件参数的声明

通过props声明需要传递的参数

  1、通过数组声明

const comp = {
  props:['参数1','参数2']
}

  2、通过对象声明

const comp = {
  props:{
    参数1: String,
    参数2: [String,Number,Array]
  }
}

  3、指定参数的默认值

const comp = {
  props:{
    参数1: {
      type:String,
      default:""
    },
    参数2: {
      type:[String,Number,Array],
      default(){
        return 默认值
      }
    }
  }
}

3、使用参数的方法

使用的时候和使用data一样,可以通过this访问到这些参数,但是这个参数是只读的,不能修改它

4、如何传递参数

  通过标签的属性传递参数

<标签名  参数名="参数值"  :参数名2="参数值"></标签名>

5、注意事项

1、props参数是只读的,不能修改

2、传参的时候,如果驼峰命名要转成-连接

3、声明参数的时候如果是引用类型,默认值要用函数设置

6、案例

 <template id="search">
        <div>
            <input type="text" name="" id="" v-model="keywords">
            <button @click="search">搜索</button>
        </div>
    </template>
    <script>
        const search = {
            template: "#search",
            data(){
                return{
                    keywords:'',
                }
            },
            methods:{
                search(){
                    this.$emit("search",this.keywords)
                }
            }
        }
        Vue.component("search", search)
    </script>

    <!-- 列表组件 -->
    <template id="list">
        <div>
            <ul>
                <li v-for="item in list" :key="item.id">{{item.name}}</li>
            </ul>
        </div>
    </template>
    <script>
        const list = {
            template: "#list",
            props: {
                list: {
                    type: Array,
                    default() {
                        return []
                    }
                }
            }
        }
        Vue.component("list", list)
    </script>

    <div id='app'>
        <search @search="onSearch($event)"></search>
        <list :list="list.filter(item=>item.name.includes(keywords))"></list>
    </div>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                list: [
                    {
                        id: 1,
                        name: "奔驰",
                    },
                    {
                        id: 2,
                        name: "荣威",
                    },
                    {
                        id: 3,
                        name: "大众",
                    },
                    {
                        id: 4,
                        name: "宝马",
                    }, {
                        id: 5,
                        name: "别克",
                    }, {
                        id: 6,
                        name: "吉利",
                    }, {
                        id: 7,
                        name: "雪佛兰",
                    },
                ],
                keywords:'',
            },
            methods: {
                onSearch(e){
                    this.keywords=e;
                }
            }
        })
    </script>

 

posted @ 2020-09-09 21:24  靡荼  阅读(892)  评论(0编辑  收藏  举报