簡體   English   中英

Angular指令未獲取更新的控制器數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM