Vue.js VueJS-在Ajax之后更新父数据
我正在尝试VueJS,目的是增量更新jQuery项目,但在通过父组件的数据传递的子组件中,我遇到了一些问题 我的父组件是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 }
// 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
}