萬(wàn)千封印
2023-01-06 09:33:45
我有父組件和子組件。父母的數(shù)據(jù)在 ajax 調(diào)用后填充,我想將其作為道具傳遞給孩子。我嘗試了不同的解決方案,我會(huì)發(fā)布兩個(gè),但還沒(méi)有工作:你能指出錯(cuò)誤嗎?該組件確實(shí)對(duì)更改做出反應(yīng)。我還需要確保道具正確傳遞給孩子及其嵌套的孩子。嘗試:如果我不使用'v-if'指令,我將得到一個(gè)錯(cuò)誤,因?yàn)?query它作為 null 傳遞。所以我使用v-if(見(jiàn)下面的版本)并更新渲染,但它沒(méi)有反應(yīng)并保持為空(即使數(shù)據(jù)已正確更新)。我還嘗試在不使用 v-if 指令的情況下將查詢(xún)數(shù)據(jù)初始化為計(jì)算結(jié)果,因?yàn)楫吘刮抑恍枰彺媲疤岬慕Y(jié)果。我還嘗試在總線上發(fā)出事件,但組件沒(méi)有反應(yīng)。最后,我嘗試通過(guò)使用 :key(例如:key="ready")使組件具有反應(yīng)性,它應(yīng)該在更改時(shí)使組件具有反應(yīng)性:key。但是還是沒(méi)有效果。模板:<template> <div v-if="isLoaded()"> <input> <metroline></metroline> <grid :query="query"></grid> </div></template>腳本:export default {data() { return { ready : false, query : null }},components : { metroline : Metroline, grid : Grid},methods: { isLoaded() { return this.ready }, firstQuery( uid, limit, offset) { var url = // my url // using Jquery to handle cross origin issues, solving with jsonp callback... return $.ajax({ url : url, dataType: 'jsonp', jsonpCallback: 'callback', crossDomain: true }) }},created() { var vm = self; this.firstQuery(...) .then(function(data){ this.query = data; console.log('firstQuery', this.query); // attempts to pass through the query // bus.$emit('add-query', this.query); this.ready = true; self.isLoaded(); // using a self variable, temporarily, jquery deferred messed up with this; however the this.query of vue instance is properly updated })}}
1 回答

德瑪西亞99
TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
在創(chuàng)建的鉤子中,將組件實(shí)例分配給一個(gè)this名為的變量that并在回調(diào)中訪問(wèn)它,因?yàn)樵诨卣{(diào)中你在 vue 組件上下文之外(this):
created() {
var vm = self;
var that=this;
this.firstQuery(...)
.then(function(data){
that.query = data;
console.log('firstQuery', this.query);
that.ready = true;
self.isLoaded();
})
}
}
添加回答
舉報(bào)
0/150
提交
取消