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
Angularjs $watch处理程序无权访问控制器&x27;这是什么_Angularjs - Fatal编程技术网

Angularjs $watch处理程序无权访问控制器&x27;这是什么

Angularjs $watch处理程序无权访问控制器&x27;这是什么,angularjs,Angularjs,我的目标是在服务中的值发生更改时更新控制器变量值 vm.changeMe; $scope.$watch(function() { return service.value }, function(new, old) { // does not have access to vm.changeMe }) 我粘贴了一个更完整的示例,但我的一般问题是;如何在$watch回调中设置控制器变量 我使用的是Angular 1.4,我使用的是controllerAs语法。根本不要使用$watch。

我的目标是在服务中的值发生更改时更新控制器变量值

vm.changeMe;
$scope.$watch(function() { return service.value }, function(new, old) {
    // does not have access to vm.changeMe
})
我粘贴了一个更完整的示例,但我的一般问题是;如何在$watch回调中设置控制器变量


我使用的是Angular 1.4,我使用的是controllerAs语法。

根本不要使用
$watch
。您只需将控制器变量绑定到服务变量。在控制器中,执行以下操作:

vm.changeMe = service.value;

根据charlietfl的评论,我将编辑以表示您可以在范围中引用服务本身,尽管我不确定是否建议:

vm.service = service;

然后,您将看到范围中的更改以及服务中的更改。

在我的应用程序中,有多个控制器。在每个控制器中,我将“this”分配给“vm”

我有几个控制器忘了用“var”声明“vm”


因此,$scope内的“vm”。$watch回调引用了另一个控制器。

vm.changeMe
应该可以在
$watch
中访问。是否调用了
$watch
?是否尝试了
console.log(vm.notes)
?没有理由你不应该有访问权限…提供复制问题的演示只要它连接到作用域,你就应该能够访问
vm.changeMe
在你的
$作用域内。$watch
功能我不知道如何让一个简单的角度应用程序在小提琴中工作,所以我不能提供演示。我已经修改了我的原始问题需要完整的代码示例。问题与javascript中“this”的工作方式有关。在我所有的控制器中,我都设置了一个名为“vm”的变量“对于这个。如果它是一个原始的…重要的是要注意这是真的,它将不起作用。”。我已经这样做了,但我不确定我是否会推荐,那就是在控制器中引用服务本身:vm.service=service;这或建议将
value
作为服务中的对象我确实可以使用,但当我使用自定义过滤器时,它会中断。vm.changeMe=filter(service.valueCollection)
var vm = this;
// bad
vm = this;

// good
var vm = this;