当前位置: 首页 > 面试题库 >

AngularJS:'控制器作为语法'和$ watch

莫选
2023-03-14
问题内容

使用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,不可能将大量的公