- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用 AngularJS 中的标准 Controller 语法,您可以像这样观察变量:
$scope.$watch(somethingToWatch, function() { alert('It changed!'); });
使用 controllerAs 语法,我想在事件 Controller 中对这一变化使用react。最简单的方法是什么?
更多细节,如果有帮助的话。我在控制应用程序上下文(用户选择、开始时间、结束时间等)的侧 Pane 中有一个 Controller 。因此,如果用户更改为不同的上下文,主视图应该使用react并更新。我将上下文值存储在一个工厂中,每个 Controller 都在注入(inject)该工厂。
最佳答案
您始终可以使用观察者评估函数,特别有助于观察 Controller 实例或任何对象上的某些内容。实际上,您可以为此返回任何变量。
var vm = this;
//Where vm is the cached controller instance.
$scope.$watch(function(){
return vm.propToWatch;
}, function() {
//Do something
}, true);//<-- turn on this if needed for deep watch
还有一些方法可以使用绑定(bind)函数来绑定(bind)this
上下文。
$scope.$watch(angular.bind(this, function(){
return this.propToWatch;
//For a variable just return the variable here
}), listenerFn);
甚至 ES5 function.bind:
$scope.$watch((function(){
return this.propToWatch;
}).bind(this), listenerFn);
如果您在 typescript 世界中,它会变得更短。
$scope.$watch(()=> this.propToWatch, listenerFn);
尽管您可以在 Controller ($scope.watch('ctrlAs.someProp'
) 中观察 Controller 别名,但它会带来几个问题:
它预测(或者换句话说,预先确定)在 View /路由/指令/模式或使用 Controller 的任何地方用于 Controller 的别名。它破坏了使用 controllerAs:'anyVMAlias'
的目的,这也是可读性的一个重要因素。由于使用 Controller ,您需要知道实现中定义的名称,因此很容易出现拼写错误和维护问题。
当您对 Controller (只是 Controller )进行单元测试时,您需要使用 Controller 内部定义的完全相同的别名再次进行测试(如果您正在编写 TDD,这可以说是一个额外的步骤),理想情况下不应该测试 Controller 时需要。
使用提供针对字符串的观察器函数的观察器始终可以减少 Angular $parse(watch 用于创建表达式)在内部将字符串表达式转换为观察函数所需的一些步骤。在 $parse implementation 的 switch-case 中可以看到
关于javascript - 在 Angular 中使用 controllerAs 语法,如何观察变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28310862/
我使用 plunker 中的范围创建了一个 d3 条形图指令 http://plnkr.co/edit/yF8H9i8tyu1o2xJCN9bV Controller 的范围内有 chartData。
我正在编写 AngularJS 教程,我看到以下代码: .state('index',{ url:"/", templateUrl:"views/index.html", controll
我正在尝试遵循 John Papa 的 angularJS 风格指南 here并开始将我的指令切换为使用 controllerAs。但是,这是行不通的。我的模板似乎无法访问分配给 vm 的任何内容。请
我是 Angular 新手,想使用 ui-bootstrap 来使用模态(弹出表单)来自 Angular 。我正在学习Angular bootstrap site 。可以看出,它利用了Controll
我有几个嵌套指令。我试图保持一致并使用 controllerAs 语法。但是我正在努力寻找一种干净的方法让 children 调用父方法,该方法不包括父方法在其范围内放置看似随机的函数。 angula
我需要的是根据通过 HTML 元素属性值传递给该指令的值将数据注入(inject)指令内,该元素动态变化. 这是我的代码: angular.module('test', []) .contro
据我所知,在“指令定义对象”上使用 Controller 属性会在每次链接给定指令时创建该 Controller 的单独实例吗? 现在玩 controllerAs patterns 我可以看到,当每个
在 AngularJS 中使用 controllerAs 语法时,为 ng-click 等定义处理程序的最佳位置是什么?在 Controller 上还是在作用域上(在链接函数中定义)? 那么,你使用:
我实际上正在创建一个小指令,但我正面临范围对象和 controllAs 的问题。 事实上,我有这样的结果: angular.module('app') .directive('historyConne
我的网络应用程序有几个页面,它们都有自己的 Controller 。在这些页面中,我使用也有 Controller 的指令。所有 Controller 都使用 controllerAs 语法,它们都设
我目前有一个使用父 Controller 范围内属性的指令: .controller('MainCtrl', function($scope) { $scope.name = 'My Name';
我无法使用 controllerAs 语法/样式从这里访问指令的独立作用域变量。 我可以使用 $scope 访问变量,但这似乎并不一致。有没有办法使用 this 访问隔离作用域的变量? 这是一个 gi
最近我一直在使用 ControllerAs 语法,但我不确定如何能够在 $watch 中从 Controller 更改模型。 我的 watch 是这样的: $scope.$watch(angular.
嘿,我是 angularjs 的新手,我在 angularjs 中使用 controlleras 样式,因为代码是可呈现的和网络的。我的问题是在 Controller 中调用子函数我的代码如下 //
有人告诉我,controllerAs 模式通过在作用域上附加更少的东西来提高 AngularJS 应用程序的性能。 我真的不明白这是怎么发生的,因为 Controller 本身在范围内公开了它的属性。
我在 html 代码中有这个: {{ ::schema.name }} Empty 问题是,使用此语法时我看不到任何结果 - 如果未填充过滤器,则应显示 10 个结果。 注意:
正如标题所示,我在使用嵌套自定义指令的 Angular 项目上遇到了一些问题。我正在创建一个界面,允许用户通过单击复选框来过滤搜索结果的 JSON 提要。指令模板层次结构如下: 我似乎能
这是我的代码: //HTML {{foo.name}} //脚本 app.directive('myDirective', function() { return { restr
我使用 controllerAs 语法来避免在我的 Controller 中出现 $scope soup,并且还使用 ui.bootstrap 来呈现模态视图。 我需要打开一个与当前 Controll
嗨,我有 StudentController如下, function StudentController($scope,StudentService){ $scope.student = St
我是一名优秀的程序员,十分优秀!