AngularJS $范围已更新,而不是视图

时间:2014-12-12 17:58:58

标签: javascript angularjs angularjs-scope

我看了很多帖子,但没找到一个与我正在寻找的东西相匹配的帖子。我分成多个控制器,将功能明确地分成多个区域。有一个集中服务,包含在各个控制器之间传递并在不同区域的屏幕上显示的所有数据。我遇到了一个控制器的问题,该控制器正在进一步下载与其他数据相同的数据,但是当操作服务中的数据时,UI不会更新。在每个控制器中,我将范围变量设置为服务中的对象..

$scope.package = SampleService.getPackage();

然后我使用ng-repeat来循环包,它包含一个数组,并且可以包含要显示的嵌套数据数组。在此过程中,数据被处理并分配给这些项目(在服务内,而不是控制器中)。如果我将$ scope.package变量放在循环中,我可以看到该变量正在从服务中更新(在控制台中观察它),但更改不会反映在屏幕上。特别是,我设置了几个值true / false,并根据它们的值,屏幕上会显示几个图标。在我点击屏幕上的某些内容之前,图标从未显示(未检测到范围变量未更改)(假设这会触发摘要循环)。然后会显示图标。但是,它们会根据任务的状态多次更改。我必须继续点击才能更改图标。

有什么我想念的吗?对结构的更改在页面的另一个区域中完美地工作。这是我无法正常工作的一个领域。唯一的区别是我正在切换true / false而不是操纵对象的其他区域。可以使用angular.copy来设置真/假值吗?

我从这里做什么都有点不知所措..

建议?

2 个答案:

答案 0 :(得分:0)

我确信会有更好的答案,但有一件事要尝试将服务执行包装在$ timeout中,这会强制进行摘要。

$timeout(function() {
    $scope.package = SampleService.getPackage();
});

答案 1 :(得分:-1)

听起来好像是触发$digest循环:http://www.sitepoint.com/understanding-angulars-apply-digest/

这将导致控制器中出现以下代码:

$scope.$apply(function () {
    $scope.package = SampleService.getPackage();
});