Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在父组件更新后在子组件中执行操作_Javascript_Vue.js - Fatal编程技术网

Javascript 如何在父组件更新后在子组件中执行操作

Javascript 如何在父组件更新后在子组件中执行操作,javascript,vue.js,Javascript,Vue.js,我正在处理一个Vue.js项目,在这个项目中,我需要在父组件完成后在子组件中执行一些逻辑。特别是,子组件向父组件发出事件以保存一些数据。之后,父组件必须与子组件通信,并使其执行一些逻辑(在本例中是清除其自身的状态) 导出默认值{ 方法:{ 保存数据(事件){ $.post('/api',事件) .完成(功能(数据){ //向子级发送信号以清除数据状态 }) } }, } 我的问题是,在Vue.js中处理这个问题的正确方法是什么?我了解子组件通过事件与家长通信,家长通过道具与子组件通信。但据我

我正在处理一个Vue.js项目,在这个项目中,我需要在父组件完成后在子组件中执行一些逻辑。特别是,子组件向父组件发出事件以保存一些数据。之后,父组件必须与子组件通信,并使其执行一些逻辑(在本例中是清除其自身的状态)


导出默认值{
方法:{
保存数据(事件){
$.post('/api',事件)
.完成(功能(数据){
//向子级发送信号以清除数据状态
})
}
},
}

我的问题是,在Vue.js中处理这个问题的正确方法是什么?我了解子组件通过事件与家长通信,家长通过道具与子组件通信。但据我所知,仅更改道具不会导致子组件中的任何逻辑更新。

更改父组件中的状态将更新子组件中的状态。因此,如果你更新任何道具,这将是反应性的,并在孩子们适当地更新

您可以在传递的道具上添加一个
watch
(到子组件),特别是如果给定对象确实由于
deep:true
而嵌套了大量更改数据


经过一些实验,我发现将回调传递给家长最适合我的目的。子对象包装数据,并在事件中调用回调,然后由父对象接收。完成回调后,父对象可以在子对象的上下文中执行回调。我还发现它还有一个额外的好处,即允许在循环中呈现多个子组件。虽然这不是我最初问题的要求,但拥有它确实很好

Vue.component('child-component'{
数据:函数(){
返回{
id:这个,childId,
值:“你好,世界”
};
},
道具:['childId'],
方法:{
saveData(){
数据={
id:this.id,
值:这个值
};
callback=()=>{alert('子组件说:子元素'+this.id+'的初始值为:'+this.Value);this.clearData();alert('子组件说:子元素'+this.id+'的最终值为:'+this.Value);};
此.$emit('saveEvent',{data,callback})
},
clearData(){
这个值=“”;
}
},
模板:`我是孩子{{childId}}单击我保存我的数据`
});
const vm=新的Vue({
el:“#应用程序”,
数据:{},
方法:{
saveData({data,callback}){
调试器;
警报('父组件显示:正在保存数据…');
回调();
}
},
模板:`
我是父组件

` })


使用vuex怎么样?@Areg vuex不是一种在任何给定时间都需要使用的火箭发射器。它适合于特定的用途(基本上是通过许多组件级别传递数据,因此是“全局的”)。你应该始终使用最适合其用途的选项。@kissu vuex是一个火箭发射器嗨,我的回答有帮助吗?
<template>
    <div>
        <child-component @save="saveData">
    </div>
</template>
<script>
export default {
    methods: {
        saveData(event){

            $.post('/api', event)
                .done(function(data){
                    // signal to child to clear data state
                })
        }
    },
}
</script>