AngularJS$scope更新,而不是视图

AngularJS $scope Updated, Not The View

本文关键字:视图 scope 更新 AngularJS      更新时间:2023-09-26

我看过很多帖子,但还没有找到一个与我正在寻找的内容完全匹配的帖子。我拆分为多个控制器,以将功能清楚地划分为多个区域。有一个集中式服务,其中包含在各个控制器之间传递并显示在不同区域的屏幕上的所有数据。我遇到了一个控制器的问题,该控制器正在获取与其他控制器相同的数据,但是在操作服务中的数据时UI不会更新。在每个控制器中,我为服务中的对象设置了一个范围变量。

$scope.package = SampleService.getPackage();

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

我错过了什么吗?对结构的更改在页面的另一个区域中完美运行。这是我无法正常工作的领域。唯一的区别是我切换真/假,而不是操纵对象的其他区域。使用 angular.copy 设置真/假值会有所帮助吗?

我有点不知所措,从这里开始做什么..

建议?

我相信

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

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

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

这将在控制器中生成以下代码:

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