vue之父子传值

全局组件

<div class="app">

        <!-- 组件名是大写 在浏览器编译的时候会转成小写,导致找不到想应的组件,可以全变成小写,中间加-来解决 -->

        <child1></child1>

        <!-- 所有的组件都需要使用一个div来包裹 -->

        <div><child-a/></div>

        <div><child-b/></div>

        <!-- 模板的第二种写法,使用template加id -->

        <template id="childB">

            <div>

                <h1>我是程序员</h1>

                <h1>我是程序员</h1>

            </div>

        </template>

    </div>

    <script src="./node_modules/vue/dist/vue.min.js"></script>

    <script>

        /* 模板的第一种写法 */

        Vue.component('child1',{

            template:`<h1>我是child1</h1>`

        })

        Vue.component('childA',{

            template:`<h1>我是childA</h1>`

        })

        Vue.component('childB',{

            template:'#childB'

        })

        new Vue({

            el:'.app'

        })

    </script>

局部组件

  <div class="app">

        <div>

            <child1/>

        </div>

</div>

new Vue({

            el: '.app',

            components:{

                child1:{

                    template:`<h1>我爱学习</h1>`,

                    created() {

                        console.log('son');

                    }

                }

            }

        })

父组件给子组件传值

<div class="app">

        <div>


            <child :carr="arr"  />

        </div>

    </div>

    <template id="child">

        <div>

            <h1 v-for="(item,index) in carr" :key="index">姓名:{{item.name}},年龄:{{item.age}}</h1>

        </div>

    </template>

    <script>

        new Vue({

            el: '.app',

            data: {

                arr: [{

                    name: 'zhangsan',

                    age: 40

                }, {

                    name: 'lisi',

                    age: 30

                }, {

                    name:'wangwu',

                    age: 20

                }]

            },

            components: {

                child: {

                    template: '#child',

                    /* 子组件用props来接收carr的值  简写的方式 */

                    /* props: ['carr'] */

                    props: {

                        /* 全面的写法 有默认值 */

                        carr: {

                            type: Array,

                            dafault: [{

                                name: 'zhangsan',

                                age: 40

                            }]

                        }

                    }

                }

        })

子组件传给父组件

<template id="child">

        <div>

第一步 给子组件 设置点击函数fn 

            <h1 v-for="(item,index) in cmsg" :key="index" @click="fn(index)" :class="{line:item.flag}">{{item.content}}</h1>

        </div>

    </template>

第二步 给子组件设置函数this.$emit('change' ,i) 触发父组件函数

components: {

                child: {

                    template: '#child',

                    props: {

                        carr: {

                            type: Array,

                            dafault: [{

                                name: 'zhangsan',

                                age: 40

                            }]

                        }

                    },

                    methods: {

                        change(i){

                            this.$emit('change',i)

                        }

                    },

                }

第三步 给父组件设置@change,要和子组件上传的函数参数相同

<child :carr="arr" @change="del" />

第四步 在父组件methods里设置参数直接改变父组件的值

new Vue({

            el: '.app',

            data: {

                arr: [{

                    name: 'zhangsan',

                    age: 40

                }, {

                    name: 'lisi',

                    age: 30

                }, {

                    name:'wangwu',

                    age: 20

                }]

            },

            methods:{

                del(i){

                    this.arr.splice(i,1)

                }

            })

Vue添加属性

/* vue2的缺陷 给对象添加属性,但不会刷新显示 */

                    /* $.set()的三个参数 第一个参数是目标对象

                    第二个参数是 目标参数的索引

                    第三个参数是 具体要修改的内容 */

                    /* 针对对象 */

                    /* $.set(this.msg,content,'XXXX') */

                    /* 针对数组 */

                    /* $.set(this.msg,i,{content:this.msg[i].content,flag:true}) */

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容