Angularjs为什么数组不在前端更新?

时间:2014-07-26 16:21:47

标签: arrays angularjs service dependency-injection

我有两个控制器,CompositionsController和CritiqueController,他们使用名为Critiques的服务来共享一个数组对象。我想在前端显示更新的数组对象。我console.err out the array of array,你看到它更新,但不会在前端更新。我究竟做错了什么?

另外,请注意,提供满足一个功能的服务是否合适,以确保共享一系列关键字?

myApp.factory('Critiques', function () {
  return new Array();
});

以下是我的申请测试: http://plnkr.co/edit/3Wu7UH?p=preview

此外,要测试我的应用程序,您必须单击“大写”按钮,然后单击span标记。 ,这会将一个名为'critique'的模型对象添加到我的'critiques'数组中。

感谢您提供任何帮助或建议。

2 个答案:

答案 0 :(得分:1)

$scope.critiques在jQuery的事件处理程序中被修改,因此angular不知道它是否被更改。

之后您必须手动运行$scope.$apply(),以查看它反映在视图上。

添加$scope.$apply()后,您会发现另一个错误:

Error: Duplicates in a repeater are not allowed. Repeater: critique in critiques

这是因为每次单击跨度时都会向$scope.critique添加相同的$scope.critiques对象。 ng-repeat不允许任何重复的对象。

您可以使用angular.copy()这样解决方法:

$scope.critiques.push(angular.copy($scope.critique));

或者您可能想要更改critique对象的构造方式。

以下是一个有效的示例: http://plnkr.co/edit/GjW4cN?p=preview

答案 1 :(得分:0)

if(!$scope.$$phase) {

      $scope.apply();
}

问题可能是您在更新阵列时已经编写了视图。