更改数据后,ng-repeat不会更新

时间:2014-02-18 03:46:15

标签: javascript angularjs

更新

  1. 使用angular的服务。
  2. 在回调中设置$ scope.items。
  3. 谢谢Sylvain和Chen-Tsu Lin。


    我是Angular的新手,说英语有限。这可能是一个非常简单的问题。

    我正在尝试在数据更改时显示项目列表。但是,我没有看到列表,除非我在运行代码之前初始化项目。

    html代码:

    <ul ng-controller="testController">
        <li ng-repeat="item in items">{{item.description}}<li>
    </ul>
    

    js code:

    function testControler() {
        var items = []
        var data = [{description: 'food'}, {description: 'fruit'}]
        setTimeout(function() { items = data }, 2000)
    
        $scope.items = item
    }
    

2 个答案:

答案 0 :(得分:1)

使用$timeout代替setTimeout;这样你就可以留在棱角分明的世界里。同时在回调中设置$scope.items

function testControler($timeout) {
    $scope.items = [];
    var data = [{description: 'food'}, {description: 'fruit'}]
    $timeout(function() { $scope.items = data }, 2000)
}

答案 1 :(得分:0)

函数应该在Angular的$scope.apply()方法中执行,它将触发$scope.digest()并导致数据更改。

使用Angular的服务,例如$http$timeout$interval ...,它会自动包含在$scope.apply()中并执行。

但是,如果您使用某些母语功能,例如XMLHttpResquestsetTimeoutsetInterval,您的模型更改将不会在$scope.apply()中自动执行。因此,数据不会发生变化。

因此,请使用$timeout代替setTimeout

注入$timeout服务依赖

function testControler($timeout) {

setTimeout更改为$timeout

$timeout(function() { items = data }, 2000)