• vue 父子组件通信


    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <body>
    
    <div id="app">
        <input type="text" v-model="msg">
        <!-- :cmovies="movies":父传子之传值 -->
        <!-- @item-click="itemClick":接收子组件通过自定义事件传过来的值(子传父亲) -->
        <!-- ref="c" 组件标识,利于得到该子组件实例对象 -->
        <cpn ref="c" :cmovies="movies" @item-click="itemClick"></cpn>
    </div>
    
    
    <!-- 子组件模板 -->
    <template id="cpn">
        <div>
            <h1>从父组件传过来的值:</h1>
            
            <ul>
                <li v-for="item in xmovie" @click="clickmovie(item)">{{item}}--点我传值至父组件>></li>
            </ul>
        </div>
    </template>
    <script>    
        // 子组件    
        const cpn = {
            // 引用模板
            template : "#cpn",
            // props 父传子之接收
            // props: ["cmovies"],
            props : {
                cmovies :{
                    // 限定类型
                    type:Array,
                    // 默认值(父组件未传值)
                    default(){
                        // 这里为什么要用工厂函数?思考下,当限定类型为Object或Array时会报错
                        return ['不能说的秘密','头文字D'];
                    },
                }
            },
            data(){
                return {
                    // 将父组件传过来的值放到data里面,变成自己的属性(拓展性,不然不允许修改)
                    xmovie : this.cmovies
                };
            },
            methods: {
                clickmovie (item){
                    console.log("子组件点击",item)
                    // 将点击事件转成自定义事件传给父组件
                    // emit:发射
                    console.log("值通过自定义事件发射至父组件")
                    this.$emit('item-click',item);
                }
            },
            mounted(){
                console.log("cpn子组件挂载完毕,根组件root对象:",this.$root)
            }
        
        }
        // 父组件,在这里父组件是vue实例
        const app2 = new Vue({
            el: "#app",
            data: {
                // 准备传给子组件的值
                movies: ['海王','海贼王'],
                msg:"watch实时监测",
            },
            /*注册组件*/
            components:{
                cpn,
            },
            methods:{
                itemClick(item){
                    console.log("父组件接收",item);
                }
            },
            //  watch:实时监测属性值的改变
            watch:{
                msg(newVal,oldVal){
                    console.log("watch实时监测更新数据,新数据:",newVal)
                }
            },
            mounted  (){
                // this.$refs 所以的子组件 
                // this.$refs.c 子组件中 设置了ref属性值为c的内个组件
                console.log("vue实例挂载完毕,有一个子组件,实例对象为:",this.$refs.c)
            }
        })
    
    </script>
    </body>
    </html>
  • 相关阅读:
    Code基础——2.排序
    设计模式——4.装饰模式
    Shader笔记——1.光照基础
    C#笔记——7.序列化与反序列化
    C#笔记——6.反射与特性
    lua小技巧记录--新建对象时重置元表
    发现的lua小技巧记录--在:方法中使用self的技巧
    lua版pureMVC框架使用分析
    在xlua中使用DoTween动画插件
    Unity工程性能优化学习笔记
  • 原文地址:https://www.cnblogs.com/cl94/p/12257891.html
Copyright © 2020-2023  润新知