• 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(){
                // 又是工厂函数,为什么和vue实例data的定义有别?多个vue组件,如果不用工厂函数的话,各个vue实例对象的属性会引用混乱
                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>
  • 相关阅读:
    一键复制文本框内容代码、
    改掉这些坏习惯,你不再是菜鸟
    使用cookie保存页面登录信息
    二维数组转换成一维数组
    jQuery选择器总结
    cookie 和session 的区别详解
    PHP扫雷(转载)。
    PHP简易计算器方法2
    PHP简易计算器方法1
    业务逻辑的存储过程(添加学生的案例)(自动编号)
  • 原文地址:https://www.cnblogs.com/cl94/p/12257507.html
Copyright © 2020-2023  润新知