Vue.js VueJS-在Ajax之后更新父数据

Vue.js VueJS-在Ajax之后更新父数据,vue.js,Vue.js,我正在尝试VueJS,目的是增量更新jQuery项目,但在通过父组件的数据传递的子组件中,我遇到了一些问题 我的父组件是 // parent_component.js var parentData = {}; var parentComponent = Vue.component('parentComponent', { data: function() { return { parentData: _parentData }

我正在尝试VueJS,目的是增量更新jQuery项目,但在通过父组件的数据传递的子组件中,我遇到了一些问题

我的父组件是

// parent_component.js
var parentData = {};
var parentComponent = Vue.component('parentComponent', {
    data: function() {
        return {
            parentData: _parentData
        }
    },
    delimiters: ['((', '))']
})

$.ajax({
   url: '/someUrl/',
   success: function(response) {
      _parentData = response
   }
我的子组件是:

// child_component.js
Vue.component('child-component', {
    template: '<div>((data.someProp))</div>'
    props: ['data'],
    delimiters: ['((', '))']
})
//child_component.js
Vue.component(‘子组件’{
模板:“((data.someProp))”
道具:[“数据”],
分隔符:['(',')']
})
我的HTML是:

// index.html
<parent-component inline-template>
     <child-component v-bind:data="parentData"></child-component>
</parent-component>
//index.html
当我在初始化childComponent之后立即更新
\u parentData
时,这一切都可以正常工作。但是我实际上需要执行一个Ajax调用并更新_parentData,它不会在childComponent中更新。
注意。我检查了Ajax调用的回调中是否存在_parentData对象。
此外,我还尝试将Ajax调用放在childComponent的
created
选项中,但这没有帮助

我错过了什么

更新

我猜我犯了典型的初学者错误!如上所述,
Vue无法检测到属性添加。因此,在进行异步调用之前,我需要在_parentData上定义
someProp
属性

所以如果我定义
var parentData={someProp:''}它会工作的


看看这个小把戏:

如果您共享代码中的AJAX部分,也许我可以提供更好的帮助,但我认为最简单的方法是
从子元素发出一个事件,并在AJAX调用完成时用父元素捕捉它(成功或错误)

事件提供了一种将子组件中的更改通知父组件的方法

模板用法:

<my-component v-on:myEvent="parentHandler"></my-component>
<!-- Or more succinctly, -->
<my-component @myEvent="parentHandler"></my-component>
此外,您可以创建全局事件总线,以便在应用程序中的任何位置传递事件

摘自

编辑

好的,我不太理解您的意思,如果您在更新父项时从父项向子项发送数据时遇到问题,正确的方法是双重数据绑定

可能您的问题是,
数据
仅在组件创建时计算,而您的子组件将使用父组件的初始值创建

您可以尝试一些不同的方法来解决此问题,例如:

1-可能您的问题与变更检测有关

可能您正在对象中创建一个新属性

 _parentData = response
…当你应该做的时候

_parentData.$set('someObject.someProperty', someValue)
2-在父级上使用
watch
,而不是
created

 watch:{ 
  yourData() {
        $.ajax({
            url: '/someUrl/',
            content_type: 'application/json',
            data_type: 'json',
            success: function(response) {
                 _parentData = response
            }
         })
  },
3-尝试使用
.sync
(在2.0中已弃用):


希望有帮助

ajax调用是在创建父组件的模块中完成的,而不是子组件
success:response=>this.parentData=response
 watch:{ 
  yourData() {
        $.ajax({
            url: '/someUrl/',
            content_type: 'application/json',
            data_type: 'json',
            success: function(response) {
                 _parentData = response
            }
         })
  },
<component :something.sync="variable"></component>
success: () => (response) {
                 _parentData = response
            }