有两种模式用于访问控制器函数:“this”和“$ scope”。
我应该使用和什么时候?我理解“this”设置为控制器,“$ scope”是视图的作用域链中的一个对象。但是使用新的“Controller as Var”语法,你可以很容易地使用。所以我要问的是什么是最好的,什么是未来的方向?
我应该使用和什么时候?我理解“this”设置为控制器,“$ scope”是视图的作用域链中的一个对象。但是使用新的“Controller as Var”语法,你可以很容易地使用。所以我要问的是什么是最好的,什么是未来的方向?
例:
>使用“this”:
function UserCtrl() { this.bye = function() { alert('....'); }; } <body ng-controller='UserCtrl as uCtrl'> <button ng-click='uCtrl.bye()'>bye</button>
>使用$ scope
function UserCtrl($scope) { $scope.bye = function () { alert('....'); }; } <body ng-controller='UserCtrl'> <button ng-click='bye()'>bye</button>
我个人认为this.name更容易在眼睛和更自然比较其他Javascript OO模式。
建议好吗?
两者都有自己的用途。首先,一些历史…
$ scope是“经典”技术,而“控制器”是更新近的(从版本1.2.0正式,虽然它出现在不稳定的预发布之前)。
两个都工作得很好,唯一错误的答案是混合他们在同一个应用程序没有明确的理由。坦率地说,混合它们将起作用,但它只会增加混乱。所以选择一个和滚动它。最重要的是要保持一致。
哪一个?这取决于你。还有更多的例子,有$范围,但“控制器作为”也在收拾蒸汽。这个比那个好吗?这是有争议的。那么你怎么选择呢?
安慰
我喜欢“控制器为”,因为我喜欢隐藏$范围,并通过中介对象将控制器中的成员暴露给视图。通过设置这个*,我可以暴露我想从控制器暴露到视图。你也可以用$ scope来做,我只是喜欢使用标准的JavaScript。事实上,我编码它这样:
var vm = this; vm.title = 'some title'; vm.saveData = function(){ ... } ; return vm;
这对我感觉更清洁,使得很容易看到暴露在视图中的东西。注意我命名我返回的变量“vm”,它代表viewmodel。这只是我的约定。
使用$ scope我可以做同样的事情,所以我不添加或减少与技术。
$scope.title = 'some title'; $scope.saveData = function() { ... };
所以它由你决定。
注射
使用$ scope我需要注入$ scope到控制器。我不需要这样做与控制器,除非我需要它为某些其他原因(如$广播或手表,虽然我尽量避免在控制器中的手表)。
更新
我写了这篇文章关于2个选择:
http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/