使用controller as
语法时如何订阅属性更改?
controller('TestCtrl', function ($scope) {
this.name = 'Max';
this.changeName = function () {
this.name = new Date();
}
// not working
$scope.$watch("name",function(value){
console.log(value)
});
});
<div ng-controller="TestCtrl as test">
<input type="text" ng-model="test.name" />
<a ng-click="test.changeName()" href="#">Change Name</a>
</div>
只需绑定相关上下文即可。
$scope.$watch(angular.bind(this, function () {
return this.name;
}), function (newVal) {
console.log('Name changed to ' + newVal);
});
示例:http://jsbin.com/yinadoce/1/edit
更新:
Bogdan Gersak的答案实际上是等效的,两个答案都尝试this
在正确的上下文中进行绑定。但是,我发现他的答案更干净。
话虽如此,首先,您必须了解其背后的基本思想。
更新2:
对于那些使用ES6的人,通过使用它们arrow function
可以获得具有正确上下文OOTB的功能。
$scope.$watch(() => this.name, function (newVal) {
console.log('Name changed to ' + newVal);
});
例
主要内容:AngularJS 控制器,AngularJS 实例,控制器方法,AngularJS 实例,外部文件中的控制器,AngularJS 实例,其他实例,AngularJS 实例 AngularJS 控制器 控制 AngularJS 应用程序的数据。 AngularJS 控制器是常规的 JavaScript 对象。 AngularJS 控制器 AngularJS 应用程序被控制器控制。 ng-controller 指令定义了应用程序控制器。 控制器是 JavaScript 对象,由标准的
问题内容: 我一直看到下面的angularjs控制器语法结构。 为什么在参数名称中重复?为什么不这样 要么 问题答案: 数组语法将帮助您缩小/缩小代码。 将被缩小并修改为: 因此Angular将无法确定要注入哪些依赖项 另一方面,使用声明: 将缩小为: 所以角就知道了,和代表。 如果您使用第一个示例代码,则还有另一种注入变量的方法,如下所示: 要么 当注释代码时,它将创建上面提到的方法。 因此,主
问题内容: 我编写角度控制器的风格是这样的(使用控制器名称而不是函数) 我现在需要的是提供我要定义解析部分的路线时: 由于控制器定义为名称,如何解决以下问题? 为了更详细地阐明,我想在解析路由之前从服务器加载一些数据,然后在控制器中使用这些数据。 更新: 更准确地说,我希望每个模块都有其“解析”功能,该功能将在执行具有该控制器的root用户之前被调用。这篇文章中的解决方案(由MiskoHevery
问题内容: 在我的Angularjs服务中,我有以下代码: 我的ASP.net控制器中有此方法: 我已经设置了一个断点,它被触发了,但是由于某种原因我的例程ID为null,而我使用angular的$ http.post发送的数据却不是。 为什么会这样呢? 问题答案: 试试这个:
问题内容: 无法使用ControllerAs 有人可以向我解释以下情况吗? 作品 休息时间 那个使它成为关键字的字母-我想要-破坏了森林。 为什么是这样? PS我知道这个约定,但是我发现它干扰了控制器/视图模型的可移植性。 问题答案: 问题是肯定 不会 说是在JavaScript保留字。 控制器中 没有规则, 因为 语法表明您需要将变量的值分配给与控制器同名的变量,我很确定angular也不会这样
本文向大家介绍AngularJS控制器继承自另一控制器,包括了AngularJS控制器继承自另一控制器的使用技巧和注意事项,需要的朋友参考一下 AngularJS里控制器继承,常用的就是作用域嵌套作用域。默认情况下,当前作用域中无法找到某个属性时,就会在父级作用域中进行查找,若找不到直至查找到$rootScope。 但有些情况下,rootScope下就是我们的controller,不可能将大量的公