一尘不染

当ajax调用更改其值时,AngularJS中的ng-repeat列表不会更新

ajax

我很困惑。为什么当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则会发生有关错误。

控制台输出

[Object]
    0: Object
        Attributes: null
        Id: "534580464aac494e24000001"
        Name: "Registry"
        Path: ""
        __proto__: Object
        length: 1
    __proto__: Array[0]

这就是root服务器返回的结构。会是数据类型的问题吗?因为它Object不是Array。我将Golang用作服务器,并用于json.Marshal()打包来自MongoDB的数据。

更新资料

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,它将对节点进行一些修饰,因此插入的节点将被覆盖。

谢谢你们。


阅读 228

收藏
2020-07-26

共1个答案

一尘不染

我已经测试了您的代码,正如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

2020-07-26