我有两个控制器,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'数组中。
感谢您提供任何帮助或建议。
答案 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();
}
问题可能是您在更新阵列时已经编写了视图。