Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:监视服务属性_Javascript_Angularjs_Angularjs Service_Angularjs Controller - Fatal编程技术网

Javascript AngularJS:监视服务属性

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表达式,您只需保持两个变量(范围中的一个

以以下plunk为例:

2个控制器和一个服务,1个控制器(SecondaryCtrl)更新服务上的属性,另一个控制器(MainCtrl)引用并显示该属性


注意$watch表达式在MainCtrl中被注释掉了-这一行没有注释,除了我的问题之外,一切都按预期工作-有必要吗?手表应该是隐式的,还是我做错了什么?

当您将SomeService.value的值分配给范围变量时,您正在创建变量的副本,该变量是与SomeService中的值不同的对象。通过添加watch表达式,您只需保持两个变量(范围中的一个和SomeService中的一个)同步

最简单的方法不是复制值,而是创建对服务本身的引用。所以在MainCtrl中

$scope.someService = SomeService;
在你的html中

Value: {{someService.value}}

通过这种方式,您实际上是在绑定到SomeService中的值。

谢谢!我应该想到这一点。@marco sandrini即使某些服务中的值是对象,也会发生这种情况吗?如果对象被替换,它应该可以工作,但如果对象被修改,则不会刷新任何更改(但其引用保持不变)。换句话说,如果用另一个对象替换该对象,则应反映更改,但如果仅更改该对象的属性,则不会发生刷新。
Value: {{someService.value}}