javascript - AngularJs监听服务的变化

标签 javascript angularjs

为什么在 1、2、3 种情况下更改服务中的消息不会影响显示的消息?

var app = angular.module('app', []); 

app.factory('Message', function() {
  return {message: "why this message doesn't changed"};
});

app.controller('Changer', function($scope, Message) {
  Message.message = "first" // (1)

  $scope.changeItems = function() {
    Message.message = "second" // (2)
  }
});

app.controller('Listener', function($scope, Message) {
  $scope.message = Message.message
  Message.message = "third" // (3)
});

我的观点:

<div ng-controller="Listener">
  {{ message }}  
</div>

<div ng-controller="Changer">
  <button ng-click="changeItems()">change message</button>
</div>

我还在 plunkr http://plnkr.co/edit/BUPS6U0S7ktDEkH9dZTZ?p=preview 上创建了示例

最佳答案

原因是“Listener” Controller 首先启动,因为它首先出现在 View 的 HTML 上。如果您切换顺序,您将看到“第一条”消息。

还有一件事,当您设置对字符串的引用并随后更改该字符串时,您会丢失该引用,这就是为什么引用一个对象然后像这样呈现该对象的属性会更强大:

Controller :

$scope.Message = Message

查看:

{{Message.message}}

这样你就不会丢失引用

关于javascript - AngularJs监听服务的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16112532/

相关文章:

javascript - 如何结合execute_scipt和WebdriverWait

angularjs - 我应该在项目结构中的服务器端哪里管理高级算法/服务?

jquery - 使用 Angular Slick 轮播组件实现分层幻灯片

javascript - Angular.js 和 SEO

javascript - Angular 1.5 指令 bool 值未传递到范围内

javascript - 使用javascript聚焦后立即在Android上输入松散焦点

javascript - 使用 querySelectorAll 获取类名并处理更改事件

javascript - 如何在客户端更改背景图像?

javascript - IE8 正在使用 jQuery 抛出错误

javascript - 映射字典以在 Javascript 中显示下拉值