[英]Angular directive not getting updated controller data
我有一個形式,其中選擇之一是一個字段,該數據來自后端生成的數組。
我的問題是控制器有一個空數組來存儲數據。 然后,該數組由對后端的請求填充。 唯一的問題是該指令不使用更新的數據,它僅使用在控制器上創建的空數組。
我已經從隨附的plunkr中使用了此指令。 http://plnkr.co/edit/J7bQoSKe17VQ5i6RPxps?p=info
setTimeout的行為就像我的ajax調用一樣。
//Very big arry that will become all the available choices.
vm.allItems = [];
// 'Loaded' after time to act like async ajax request to server.
setTimeout(function(){
for (var i = 0; i < 9500; i++) {
var person = {
name: 'Adam' + i,
email: 'adam' + i + '@email.com',
age: 12,
country: 'United States'
};
vm.allItems.push(person);
}
document.getElementById('status').innerHTML = 'Loaded: ' + vm.allItems[4].name + ' and others.';
}, 1500);
我只是在測試更新狀態元素,以查看何時應顯示數據。
任何幫助表示贊賞! 提前致謝。
有兩個問題。
第一:
vm.multipleDemo.selectedPeople = [vm.allItems[500], vm.allItems[4]];
在超時觸發之前被調用,因此兩個值均為空。
第二:您需要將setTimeout更改為使用$ timeout。 結果應為:
$timeout(function(){
for (var i = 0; i < 9500; i++) {
var person = {
name: 'Adam' + i,
email: 'adam' + i + '@email.com',
age: 12,
country: 'United States'
};
vm.allItems.push(person);
}
vm.multipleDemo.selectedPeople = [vm.allItems[500], vm.allItems[4]];
document.getElementById('status').innerHTML = 'Loaded: ' + vm.allItems[4].name + ' and others.';
}, 1500);
$ timeout的工作原理與setTimeout相似,但是它將回調函數包裝在$ apply中,以確保角度顯示更改。
您尚未發布AJAX請求,但應查看$ http發出的請求,這將意味着結果將以角度顯示。 參見: https : //docs.angularjs.org/api/ng/service/ $ http
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.