我很困惑。为什么当ajax调用更改其值时,我的ng-repeat为什么不刷新?我在这里看到过很多问答,但是没有人谈论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); }); }
控制台确实记录了服务器返回的阵列。但是html中的列表从未更新。如果使用$scope.$apply,$digest则会发生有关错误。
$scope.$apply
$digest
控制台输出
[Object] 0: Object Attributes: null Id: "534580464aac494e24000001" Name: "Registry" Path: "" __proto__: Object length: 1 __proto__: Array[0]
这就是root服务器返回的结构。会是数据类型的问题吗?因为它Object不是Array。我将Golang用作服务器,并用于json.Marshal()打包来自MongoDB的数据。
root
Object
Array
json.Marshal()
更新资料
function EntryCtrl ($scope, $http) { $scope.rootEntry = []; $http.get('read/root').success(function(root) { $scope.rootEntry = root; console.log($scope.rootEntry); }); console.log($scope.rootEntry); }
后者的输出是[]。可能是由于$ http的异步引起的,请问原因是什么?
[]
最后
我知道为什么。我使用了一个名为的插件jsTree,它将对节点进行一些修饰,因此插入的节点将被覆盖。
jsTree
谢谢你们。
我已经测试了您的代码,正如tymeJV所说,您的实现没有问题,我建议您检查控制台窗口中是否存在一些可能的错误。
例:
function EntryCtrl ($scope, $http) { $scope.rootEntry = []; $http.get('https://api.github.com/users/mralexgray/repos').success(function(root) { $scope.rootEntry = root; console.log($scope.rootEntry); }); }
实时示例:http : //plnkr.co/edit/Grlgfob6tjE63JizWdCD?p=preview