javascript - vue2父组件怎么调用子组件的方法?
天蓬老师
天蓬老师 2017-04-11 11:27:02
[JavaScript讨论组]

我主要目的是当父组件传数据给子组件的时候,子组件会调用相应的方法。
我的想法是通过props向子组件传递数据,然后子组件watch这个数据,然后在watch里调用相应的方法。但是watch并没有生效。
请问这是什么原因而导致不生效,如果这个办法行不通又有什么办法可以实现我的要求?
考虑到系统相对比较简单,这里不打算用vuex

style:

<link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css">
#parent{
    border: 1px solid #999;
    text-align: center;
    width: 50%;
    margin: 100px auto;
}
.child{
    padding: 5px 10px;
    border-radius: 5px;
    box-shadow: 1px 1px 4px #d14;
}

html:

<p id="parent">
    <br/>
    <p @click="test">parent's msg: <code>{{ msg.text }}</code></p>
    <kbd>input:</kbd> <input v-model="msg.text">
    <br/>
    <br/>
    <span>child:</span>
    <child :msg="msg" class="child"></child>
    <br/>
    <br/>
</p>

javascript

Vue.component('child', {
    // 声明 props
    props: ['msg'],
    template: '<span  @click="test">{{ msg.text }}</span>',
    methods: {
        test: function() {
            //console.log(this.msg.text);
            this.msg.text += '1';
        }
    },
    watch: {
        msg: function() {
            //就是这里
            console.log(1)
        }
    }
});
new Vue({
    el: '#parent',
    data: {
        msg: {
            text: 'msg from parent'
        }
    },
    methods: {
        test: function() {
            this.msg.text += '1';
        }
    }
});

求解疑!

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
怪我咯

父组件传进来的props,子组件里不能改,不是双向的,只能在父组件里改,vuejs就是这么设计的。
你要想通知父级,只能通过自定义事件,$emit 触发事件,父组件监听这个事件。

阿神

把props改为{msg: String}试试。
别的没看出问题

PHP中文网

你在子组件给msg,一个默认的 "" 试试看

data :{
  msg : " "
}
黄舟

楼主请问你最后解决了吗,我也遇到了这个问题

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号