Vue组件间传值 和 访问

Posted lunawzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

 

以上是关于Vue组件间传值 和 访问的主要内容,如果未能解决你的问题,请参考以下文章

vue组件间传值

Vue3组件(18)组件间传值/共享的方法的汇总

vue的父子组件间传值以及非父子间传值

Vue中组件间传值常用的几种方式

你了解Vue组件间传值五大场景吗?

你了解Vue组件间传值五大场景吗?