Angularjs的控制器"或“scope"美元
Angularjs "Controller as" or "$scope"
我想知道angularjs中"Controller as"answers"$scope"语法的主要区别是什么。
- 它们对性能有影响吗?如果有,哪种语法更可取?
- "Controller as"语法确实提高了代码的可读性,因为Knockout.js和其他JavaScript框架都遵循相同的语法。
-
$scope将提供范围继承,这有时会导致像
这样的奇怪行为<div ng-controller="firstController"> ParentController: <input type="text" ng-model="parent"/> <div ng-controller="secondController"> ChildController: <input type="text" ng-model="parent" /> </div> </div> app.controller('ParentController', function ($scope) { $scope.parent = "parentScope"; }).controller('ChildController', function ($scope) { /*empty*/ });
a)最初子将获得父属性,它显示'parentScope'当我们更新父,子也将得到更新。但是如果我们现在改变了子属性,更新父属性不会修改子属性,因为它有自己的scope属性。
b)如果我使用控制器作为语法更改子也更新父。
我曾经写过一些关于这个问题的答案,它们基本上都归结为同一件事。在Angular中,你是在使用$scope
,即使你没有明确引用它。
ControllerAs语法允许Angular帮助你编写更高效、更容错的控制器。在幕后,当你使用ng-controller="theController as ctrl"
时,Angular会在$scope
上创建theController
作为属性,并将其赋值为ctrl
。现在你有一个对象属性,你从作用域引用,并自动保护从原型继承问题。
从性能的角度来看,由于您仍然在使用$scope
,因此应该没有什么性能差异。然而,因为你的控制器现在不直接分配变量给$scope
自己,它不需要有$scope
注入。此外,控制器可以更容易地独立测试,因为它现在只是一个普通的JavaScript函数。
从前瞻性的角度来看,现在大家都知道Angular 2.0不会有$scope
,而是会使用ECMAScript 6的特性。在Angular团队发布的任何展示迁移的预览中,他们都会首先重构控制器以消除$scope
。如果在设计代码时没有使用基于$scope
的控制器,那么迁移的第一步就已经完成了。
从设计者的角度来看,ControllerAs语法使对象被操作的位置更加清晰。与使用$scope.Address
相比,使用customerCtrl.Address
和storeCtrl.Address
可以更容易地识别由多个不同控制器为不同目的分配的地址。在一个页面上有两个不同的HTML元素,它们都绑定到{{Address}}
,并且只通过包含元素的控制器知道哪个是哪个,这是解决问题的主要难点。
最后,除非你想做一个10分钟的演示,否则你真的应该在任何严肃的Angular工作中使用controllera。
我绝对推荐Controller As语法。
它更干净,更高效,你可以更组织你的代码,这是做AngularJS的新方式。
除非你的团队已经习惯了$scope语法,否则一定要使用Controller As。
- AngularJS:ng之后,重复$scope值未按预期更新
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- $ionicplatform内的$scope不;不起作用
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- 使用$scope方法时的ControllerAs语法
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- 如何将ngrepeat下的ngmodel绑定到$scope
- 另一个if(!$scope.$$phase)$scope$apply()szenario-需要帮助才能通关
- "日期“;AJAX请求返回的类型值未定义
- Angular为什么说“;未捕获的ReferenceError:$scope未定义"
- 将$scope.model子级初始化为“”"或为空
- "scope.watch不是一个函数“;Angular.js中的错误