A lista ng-repeat no AngularJS não é atualizada quando uma chamada ajax altera seu valor
Estou totalmente confuso. Por que minha ng-repeat não é atualizada quando há uma chamada ajax alterando seu valor? Eu já vi muitas perguntas e respostas aqui, mas nenhuma delas falou sobre chamada ajax.
HTML:
<div class="row" ng-controller="EntryCtrl">
<div id="treeview" class="col-xs-4 col-sm-4 col-md-4 col-lg-4">
<ul>
<li ng-repeat="root in rootEntry">{{root.Name}}</li>
</ul>
</div>
</div>
JS:
function EntryCtrl ($scope, $http) {
$scope.rootEntry = [];
$http.get('read/root').success(function(root) {
$scope.rootEntry = root;
console.log($scope.rootEntry);
});
}
E o console registrou uma matriz que o servidor retornou. Mas a lista em html nunca foi atualizada. Se eu usasse$scope.$apply
, um erro relativo$digest
aconteceria.
Saída do console
[Object]
0: Object
Attributes: null
Id: "534580464aac494e24000001"
Name: "Registry"
Path: ""
__proto__: Object
length: 1
__proto__: Array[0]
Então é a estrutura deroot
o servidor retorna. Seria o problema do tipo de dados? Porque éObject
ao invés deArray
. Eu uso Golang como servidor e usojson.Marshal()
para empacotar os dados do MongoDB.
Atualizar
function EntryCtrl ($scope, $http) {
$scope.rootEntry = [];
$http.get('read/root').success(function(root) {
$scope.rootEntry = root;
console.log($scope.rootEntry);
});
console.log($scope.rootEntry);
}
A última saída é[]
. Provavelmente, devido à assíncrona de $ http, será esse o motivo?
Final
Eu sei porque. Eu usei um plugin chamadojsTree
, que fará algumas decorações com o nó, para que o nó inserido seja substituído.
Obrigado a todos.