• vue组件定义方式,vue父子组件间的传值


    vue组件定义方式,vue父子组件间的传值

    <!DOCTYPE html>
    <html lang="zh-cn">
    
        <head>
            <meta charset="utf-8">
        </head>
    
        <body>
            <div id="app">
                <my-nav></my-nav>
                <hr>
                <my-nav2></my-nav2>
                <hr>
                <my-demo></my-demo>
                <hr>
                <script-nav></script-nav>
                <hr>
                <my-tmp></my-tmp>
                <hr>
                <button @click="show = !show">切换动态组件</button>
                <component :is="show ?'my-nav':'my-nav2'"></component>
                <hr>
                <parent></parent>
            </div>
            <hr>
            <div id="myNav"></div>
            <script type="nav-template" id="my-nav">
                <h2>我是script中的模板</h2>
            </script>
            <template id="my-tmp">
                <h2 bgcolor="pink">我是template中的模板</h2>
            </template>
            <script src="vue.js"></script>
            <script>
            //组件: 一个大对象
            // 注册组件  (两种编写方式)
            // 注册组件,传入一个扩展过的构造器
            // Vue.component('my-component', Vue.extend({ /* ... */ }))
            // 注册组件,传入一个选项对象 (自动调用 Vue.extend)
            // Vue.component('my-component', { /* ... */ })
    
            //1.全局组件 (注册组件的位置在全局环境)
            //方式一:
            //1.1定义组件
            var myNav = Vue.extend({
                template: '<h3>我是my-nav组件->{{msg}}</h3>',
                data() {
                    return {
                        msg: '我是组件中的数据'
                    }
                }
            })
            //挂载到Vue的构造函数上,所有的Vue实例(vm)都共享这个组件,
            //所以就成了全局组件
            Vue.component('my-nav', myNav);
            //全局组件也可以实例化后直接绑定到具体的元素上
            //原理:因为myNav继承自Vue,所以也可以作为构造函数
            //同样具有Vue的实例方法.$mount()
            new myNav().$mount('#myNav');
    
            //方式二: 第二个参数是一个对象
            Vue.component('my-nav2', {
                template: '<h4>我是my-nav2222222222222组件->22222222</h4>',
            });
            //2.局部组件 (注册组件的位置在Vue的选项中)
            // 局部组件可以在Vue 的选项(配置项)中定义(my-demo),也可以使用全局已定义好的组件(my-nav)   
    
            var vm = new Vue({
                data: {
                    msg: 13,
                    show: true
                },
                components: {
                    'my-demo': {
                        template: '<h2>我是一个纯内部组件</h2>'
                    },
                    'my-nav': myNav, //我是一个使用了全局定义的内部组件
                    'script-nav': {
                        template: '#my-nav'
                    },
                    'my-tmp': {
                        template: '#my-tmp'
                    },
                    'parent': {
                        template: '<h2>我是父组件-><child :msg-p="msgP"  @childMsg="childMsg"></child>{{msgC}}</h2>',
                        data() {
                            return {
                                msgP: '我是父组件中的数据',
                                msgC:'',
                            }
                        },
                        methods:{
                            childMsg(msg){
                                this.msgC = msg
                            }
                        },
                        components: {
                            'child': {
                                template: '<div><h2>我是子组件->这是我拿到的父组件的数据->{{msgP}}</h2><button @click="send">发送</button></div>',
                                // props:['msgP'],     //方式一['','']
                                props:{
                                    msgP:String
                                },
                                data() {
                                    return {
                                        msgC: '我是子组件中的数据'
                                    }
                                },
                                methods:{
                                    send(){
                                        //vm.$emit('事件名称',数据)
                                        this.$emit('childMsg',this.msgC);
                                        vm.$emit('test', 'hi')
                                    }
                                }
                            },
                        }
    
                    }
                }
            }).$mount('#app');
    
            vm.$on('test', function (msg) {
              console.log(msg)
              setTimeout(function(){
                vm.$off()
              },5000)
            })
    
            //组件模板
            //1. template: '<h4>我是my-nav组件</h4>',
            //组件的模板:在实际项目开发中,模板的标签一般很多,直接写到js中不是很方便
            //2.可以将模板单独放在某个地方
            //2.1 <script type="nav-template" id="my-nav">
            //2.2 <template id="my-tmp">
    
            //3.动态组件
            // <component :is="组件名称"></component>
            
            //4.父子组件之间的通信
            //4.1 子组件获取父组件的数据 (属性传值)
            // 在父组件中调用子组件,给子组件绑定一个自定义属性,属性值为要传过云的值
            // 在子组件选项中有个 props获取这个自定义属性值,方法有两种:
            // 4.1.1 数组形式 props : ['属性名']
            // 4.1.2 对象形式 props : {'属性名':String,'属性名':'属性值类型'}
            // 
            //4.2 父组件获取子组件的数据 (事件系统--方法传参)
            //原理:子组件触发了父组件上的自定义事件,自定义事件的参数就是子组件要传给父组件的值。
    
    
            </script>
        </body>
    
    </html>
  • 相关阅读:
    .linearDrag on rigidbody / rigidbody2D in code?
    Unity5权威讲解+项目源码+MP4
    C#的扩展方法解说
    use crunch compression
    IIS服务命令
    使用批处理打开控制面板中的功能
    一次性在一个文件夹里建立多个文件夹
    bat 批处理切换到当前脚本所在文件夹
    %date~0,4%和 %time~0,2%等用法详解(转)
    DOS批处理高级教程(还不错)(转)
  • 原文地址:https://www.cnblogs.com/lguow/p/11962901.html
Copyright © 2020-2023  润新知