Angularjs 为什么我对服务应用的修改不';t影响DOM所涉及的所有控制器

Angularjs 为什么我对服务应用的修改不';t影响DOM所涉及的所有控制器,angularjs,Angularjs,我是使用AngularJS的新手,我很感兴趣的是,当我们更新数据时,AngularJS会自动影响数据涉及的任何地方的修改。 但不幸的是,我不能让它工作 我尝试做的一件简单的事情是在控制器B上进行更改,我希望在控制器a上实现更改,因为数据引用的是相同的服务。 数据正确地影响了两个控制器,但DOM没有根据此修改进行更新,以下是测试: HTML <body> <div ng-controller="ACrtl"> <h1>{{is_logged}}<

我是使用AngularJS的新手,我很感兴趣的是,当我们更新数据时,AngularJS会自动影响数据涉及的任何地方的修改。 但不幸的是,我不能让它工作

我尝试做的一件简单的事情是在控制器B上进行更改,我希望在控制器a上实现更改,因为数据引用的是相同的服务。 数据正确地影响了两个控制器,但DOM没有根据此修改进行更新,以下是测试:

HTML

<body>
  <div ng-controller="ACrtl">
    <h1>{{is_logged}}</h1>  <!-- Always false -->
    <button ng-click="check()">Check</button> <!-- true/false -->
  </div>
  <div ng-controller="BCrtl">
    <button ng-click="{{is_logged=!is_logged}}">Toggle throught the DOM</button> <!-- Doesn't change anything on the Javascript -->
    <button ng-click="toggle()">Toggle throught the controller</button> <!-- Change the Javascript but doesn't impact the other controller's scope -->
  </div>
</body>
我希望AngularJS能够做到这一点,这是我在代码中犯的错误


当您将分配给每个控制器上的作用域时,您将在每个控制器上创建一个新属性,这两个属性都将初始化为UserService的值

在您的情况下,您可以在每个控制器的作用域上公开服务,如下所示:

$scope.data = UserService
在你看来:

<h1>{{data.is_logged}}</h1>
{{data.is_logged}
看看这个和它提到的链接

基本变量(如布尔值)在Javascript中按值传递,变量
$scope.is_logged
只是其值在服务中的副本。因此,如果更改了原始服务值,那么这不会影响作用域上的任何副本

一种标准的方法或重新分解方法是在控制器之间共享一个对象,而不是原语,所以

app.factory('UserService', function() {
  return {
    status: {
      is_logged: false
    }
  };
});
然后在控制器中使用

$scope.status = UserService.status;
因此,控制器可以更改$scope.status.is_日志,并且这些更改将在所有控制器中看到

您可以在以下网址看到:


有道理。。。谢谢
$scope.status = UserService.status;