2017-07-14 79 views
0

我有一種形式,其中一個選項是數據來自後端生成的數組的字段。角度指令沒有得到更新的控制器數據

我遇到的問題是控制器有一個空數組來存儲數據。 這個數組然後被請求填充到後端。唯一的問題是指令不使用更新的數據,它只使用在控制器上創建的空數組。

我已經使用了這個指令從附加的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); 

我只是測試更新狀態元素,以查看數據應該出現的時間。

任何幫助表示讚賞!提前致謝。

回答

1

有兩個問題。

第一:

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); 

$超時很像setTimeout的,但它包裝在$回調函數所適用的保證變化是由角看到。

你還沒有發佈你的AJAX請求,但你應該看看$ http做出你的請求,這將意味着結果將被視爲角度。 請參閱:https://docs.angularjs.org/api/ng/service/ $ http

+0

感謝您瀏覽我的代碼Tim。對角度相當新,我真的很感激它。 感謝您的$超時提示。無論如何,只是用它來測試plunkr。 plunkr似乎在工作,但當我更改爲我的代碼時,會發生一些事情。 我在工廠/服務中使用了$ http來完成ajax調用。 'getAll:function(){ return $ http.get(CONFIG.BASE_API_URL +「all」); } '這很好。 – Cook

+0

在我看來,如果我只是用類似於 '{{allItems}}'的方式'記錄'ajax調用的結果,那麼我會看到輸出到達視圖。將allItems作爲輸入的我的指令''從不使用更新的數組。 任何想法,想知道某種範圍?也許... – Cook