有两种模式用于访问控制器功能: this
和$scope
.
我应该在何时使用?我理解this
是设置为控制器,并且$scope
是视图范围链中的对象.但是使用新的"Controller as Var"语法,您可以轻松使用它们.所以我要问的是什么是最好的,未来的方向是什么?
例:
运用 this
function UserCtrl() {
this.bye = function() { alert('....'); };
}
Run Code Online (Sandbox Code Playgroud)
<body ng-controller='UserCtrl as uCtrl'>
<button ng-click='uCtrl.bye()'>bye</button>
Run Code Online (Sandbox Code Playgroud)运用 $scope
function UserCtrl($scope) {
$scope.bye = function () { alert('....'); };
}
Run Code Online (Sandbox Code Playgroud)
<body ng-controller='UserCtrl'>
<button ng-click='bye()'>bye</button>
Run Code Online (Sandbox Code Playgroud)我个人发现,this.name
与其他Javascript OO模式相比,它更容易上手,更自然.
建议好吗?
Joh*_*apa 229
两者都有它们的用途.首先,一些历史......
$ scope是"经典"技术,而"控制器为"更新近(从版本1.2.0开始,虽然它确实出现在此之前的不稳定的预发行版中).
两者都工作得很好,唯一错误的答案是在没有明确原因的情况下将它们混合在同一个应用程序中.坦率地说,混合它们会起作用,但它只会增加混乱.所以选择一个并滚动它.最重要的是保持一致.
哪一个?这取决于你.还有更多的范围有$ scope,但"控制器为"也在增加.这个比那个好吗?这是值得商榷的.那你怎么选择?
安慰
我更喜欢"控制器为",因为我喜欢隐藏$ scope并通过中间对象将控制器中的成员暴露给视图.通过设置此.*,我可以将我想要从控制器公开的内容暴露给视图.您也可以使用$ scope执行此操作,我更喜欢使用标准JavaScript.事实上,我这样编码:
var vm = this;
vm.title = 'some title';
vm.saveData = function(){ ... } ;
return vm;
Run Code Online (Sandbox Code Playgroud)
这对我来说感觉更干净,并且可以很容易地看到暴露在视图中的内容.注意我将变量命名为"vm",它代表viewmodel.那只是我的惯例.
使用$ scope我可以做同样的事情,所以我不会添加或减少该技术.
$scope.title = 'some title';
$scope.saveData = function() { ... };
Run Code Online (Sandbox Code Playgroud)
所以它取决于你.
注射
使用$ scope我需要将$ scope注入控制器.我没有必要用控制器这样做,除非我出于其他原因需要它(如$ broadcast或watch,尽管我试图避开控制器中的手表).
更新 我写了这篇关于2个选择的帖子:http: //www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/
Roy*_*ove 40
我的观点是,javascript中的'this'在它自己有足够的问题,并且为它添加另一个意义/用途并不是一个好主意.
为了清晰起见,我会使用$ scope.
UPDATE
现在有'controller as'语法,在这里讨论.我不是粉丝,但现在它是一个更"官方"的AngularJS构造,值得一些关注.
Rya*_*ice 11
我认为Controller As更好,因为它允许更容易嵌套范围,如Todd Motto所述:
http://toddmotto.com/digging-into-angulars-controller-as-syntax/
此外,它将确保您始终至少有一个.在你的绑定表达式中,它强制你遵循不绑定到基元的推荐.
另外,您可以从2.0中消失的范围中分离出来.
归档时间: |
|
查看次数: |
76444 次 |
最近记录: |