Vue - 父子组件传值

导读 :

Vue中:
1.父组件向子组件传值:通过给子组件传递属性,子组件通过props接收父组件的值再加以使用。
2.子组件向父组件传值:通过this.$emit([自定义方法名],[传递的参数1],……)执行自定义方法来传值给父组件,父组件在方法中接收。

例子:

  • 这是一个通过父子组件传值来求和的一个例子,每个子组件点击都会加2,父组件计算2个子组件和。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript" src="../vue.js"></script>
</head>
<body>
    <div id="root">
        <!--父组件传值给子组件通过在子组件中定义属性如下(:count="0")-->
         <!--子组件传值给父组件通过执行自定义方法-->
        <counter :count="0" @inc='clickChange'></counter>
        <counter :count="1" @inc='clickChange'></counter>
        <div>{{total}}</div>
    </div>
    <script>
        // 通过父组件传值给子组件,如果子组件要改变值则会产生警告,故采用复制父组件值的方法
        var counter = {
            props: ['count'],
            data: function() {
                return {
                    number: this.count
                }
            },
            template: '<div @click="handleClick">{{number}}</div>',
            methods: {
                handleClick: function() {
                    // console.log(this.number);
                    this.number = this.number + 2;
                    //  给父组件传值
                    this.$emit('inc', 2);
                }
            }
        };

        // 父组件通过属性向子组件传值,
        var vm = new Vue({
            el: '#root',
            components: {
                counter: counter
            },
            data: {
                total: 1
            },
            methods: {
                //  要定义形参来表示接收的值
                clickChange: function(step) {
                    this.total += step;
                }
            }
        })
    </script>
</body>
</html>

总结 :

  • 实际Vue实例也是个组件,我们一般称它为根组件,若定义局部组件则需要在根组件中声明,如果是全局组件则不需。
  • 子组件通过父组件传值的方式拿到的值不可直接进行变更,否则报错(实际是警告)。结局办法:子组件中复制父组件的值再使用子组件的值即可。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容