【问题标题】:ng-repeat does not update after changing datang-repeat 更改数据后不更新
【发布时间】:2014-02-18 03:46:14
【问题描述】:

更新

  1. 使用 Angular 的服务。
  2. 在回调中设置 $scope.items。

感谢 Sylvain 和 Chen-Tsu Lin。


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

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

html代码:

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

js代码:

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

    $scope.items = item
}

【问题讨论】:

  • 不客气。如果您对答案感到满意,请点击旁边的复选标记接受。

标签: javascript angularjs


【解决方案1】:

使用$timeout 代替setTimeout;这样你就留在了角度世界。还要在回调中设置$scope.items。

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

【讨论】:

    【解决方案2】:

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

    使用像$http、$timeout、$interval...这样的Angular服务,它会自动包装在$scope.apply()中并执行。

    但是,如果您使用诸如 XMLHttpResquest、setTimeout、setInterval 之类的本地语言功能,您的模型更改将不会在 $scope.apply() 中自动执行。因此,不会发生数据更改。

    所以,用$timeout代替setTimeout:

    注入$timeout服务独立

    function testControler($timeout) {
    

    将setTimeout 更改为$timeout

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

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 2017-01-13
      相关资源
      最近更新 更多