zoukankan      html  css  js  c++  java
  • Vue组件间传值 和 访问

    1、根组件向子组件传值 :使用props属性

    <html>
    <body>
        <script src="vue.js"></script>
    
        <template id="myt">
            <div>
                <p>{{name}}</p>
                <p>{{pwd}}</p>
                <p>{{cmsg}}</p>
            </div>
        </template>
    
        <div id="app">
            <cpn :person="p" :cmsg="msg"></cpn>
        </div>
    
        <script>
            Vue.component("cpn", {
                template: "#myt",
                props: {
                    person: Person,
                    cmsg: String
                }
            })
    //定义一个Person对象 function Person(m, p) { name
    = m; pwd = p; } const app = new Vue({ el: "#app", data: { msg: "hello", p: new Person("张三", 123) }, }) </script> </body> </html>

    props可以是数组形式表示 :props:['prop1','prop2','prop3'] ,也可以对象形式props:{prop1:String,prop2:Array,prop3:Object} 。对象形式更加灵活。

    注意:如果子组件属性使用驼峰命名,在组件上写属性时把大写换成小写并在前面加-号。要么全写成小写

    2、子组件向父组件传值:使用this.$emit()

    <html>
    <body>
        <script src="vue.js"></script>
    
        <template id="myt">
            <div>
              <ul>
                  <li v-for="item in clist">
                  <button v-on:click="cbtnClick(item)">{{item.name}}</button>
                  </li>
              </ul>
            </div>
        </template>
    
        <div id="app">
            <cpn :clist="list" @clickbutton="childclickbutton"></cpn>
    
            <h3>选择对象:{{curPerson}}</h3>
        </div>
    
        <script>
            Vue.component("cpn", {
                template: "#myt",
                props:['clist'],
                methods: {
                    cbtnClick(item) {
                        this.$emit("clickbutton",item);
                    }
                }
            })
             
            const app = new Vue({
                el: "#app",
                data: {
                    curPerson: {},
                    list: [
                        {
                            id: 1,
                            name: '张三'
                        },
                        {
                            id: 2,
                            name: '李四'
                        },
                        {
                            id: 3,
                            name: '王五'
                        },
                    ],
                },
                methods: {
                    childclickbutton(item) {
                        this.curPerson = item;
                    }
                }
            })
        </script>
    </body>
    </html>

    3、父访问子组件的方法:this.$children  ,this.$refs(常用)

    <html>
    <body>
        <script src="vue.js"></script>
    
        <template id="myt">
            <div>
             <h2>{{info}}</h2>
            </div>
        </template>
    
        <div id="app">
            <cpn ref="child"></cpn>
            <button v-on:click="btnclick">访问</button>
            <h3>{{result}}</h3>
        </div>
    
        <script>
            Vue.component("cpn", {
                template: '#myt',
                data() {
                    return {
                        info:"我是子组件属性"
                    }
                },
                methods: {
                    getInfo() {
                        return this.info;
                    }
                }
            })
             
            const app = new Vue({
                el: "#app",
                data: {
                    result: ""
                },
                methods: {
                    btnclick() {
                        this.result = this.$refs.child.getInfo();
                    }
                }
            })
        </script>
    </body>
    </html>

    4、子访问父组件 :this.$parents  (父组件)  ,this.$root (根组件)

    <html>
    <body>
        <script src="vue.js"></script>
    
        <template id="myt">
            <div>
                <button v-on:click="btnclick">访问父</button>
    
                <h2>{{msg}}</h2>
    
            </div>
        </template>
    
        <div id="app">
            <cpn></cpn>
        </div>
    
        <script>
            Vue.component("cpn", {
                template: '#myt',
                data() {
                    return {
                        msg:""
                    }
                },
                methods: {
                    btnclick() {
                        this.msg = this.$root.msg;
                    }
                }
            })
             
            const app = new Vue({
                el: "#app",
                data: {
                    msg: "我是父组件中的值"
                },
            })
        </script>
    </body>
    </html>
  • 相关阅读:
    Windows平台下的读写锁
    进程的阻塞和挂起的区别
    事件函数SetEvent、PulseEvent与WaitForSingleObject详解
    多线程的那点儿事(之多线程调试)
    多线程同步内功心法——PV操作上(未完待续。。。)
    读者写者问题(有bug 后续更改)
    解决VS2010控制台程序运行结束不显示请按任意键继续
    Method has too many Body parameters openfeign
    Eclipse中Cannot nest src folder解决方法
    restTemplate重定向问题 &cookie问题
  • 原文地址:https://www.cnblogs.com/lunawzh/p/14927612.html
Copyright © 2011-2022 走看看