Javascript AngularJS:监视服务属性
以以下plunk为例: 2个控制器和一个服务,1个控制器(SecondaryCtrl)更新服务上的属性,另一个控制器(MainCtrl)引用并显示该属性Javascript AngularJS:监视服务属性,javascript,angularjs,angularjs-service,angularjs-controller,Javascript,Angularjs,Angularjs Service,Angularjs Controller,以以下plunk为例: 2个控制器和一个服务,1个控制器(SecondaryCtrl)更新服务上的属性,另一个控制器(MainCtrl)引用并显示该属性 注意$watch表达式在MainCtrl中被注释掉了-这一行没有注释,除了我的问题之外,一切都按预期工作-有必要吗?手表应该是隐式的,还是我做错了什么?当您将SomeService.value的值分配给范围变量时,您正在创建变量的副本,该变量是与SomeService中的值不同的对象。通过添加watch表达式,您只需保持两个变量(范围中的一个
注意$watch表达式在MainCtrl中被注释掉了-这一行没有注释,除了我的问题之外,一切都按预期工作-有必要吗?手表应该是隐式的,还是我做错了什么?当您将SomeService.value的值分配给范围变量时,您正在创建变量的副本,该变量是与SomeService中的值不同的对象。通过添加watch表达式,您只需保持两个变量(范围中的一个和SomeService中的一个)同步 最简单的方法不是复制值,而是创建对服务本身的引用。所以在MainCtrl中
$scope.someService = SomeService;
在你的html中
Value: {{someService.value}}
通过这种方式,您实际上是在绑定到SomeService中的值。谢谢!我应该想到这一点。@marco sandrini即使某些服务中的值是对象,也会发生这种情况吗?如果对象被替换,它应该可以工作,但如果对象被修改,则不会刷新任何更改(但其引用保持不变)。换句话说,如果用另一个对象替换该对象,则应反映更改,但如果仅更改该对象的属性,则不会发生刷新。
Value: {{someService.value}}