我应该使用`this`还是`$ scope`?

有两种模式用于访问控制器功能: this$scope

我应该使用什么和什么时候? 我知道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>
    
  • 与其他Javascript OO模式相比,我个人发现this.name更易于理解并且更自然。

    请咨询?


    两者都有其用途。 首先,一些历史...

    $ scope是“经典”技术,而“controller as”则更为新近(正式版本为1.2.0版本,尽管它在此之前的不稳定版本中出现)。

    两者都工作得很好,唯一错误的答案是在没有明确理由的情况下将它们混合在同一个应用程序中。 坦率地说,混合它们会起作用,但它会增加混淆。 所以选择一个和它一起滚动。 最重要的是保持一致。

    哪一个? 这取决于你。 $ scope有更多的例子,但是“controller as”也在增加。 这个比那个好吗? 这是有争议的。 那么你如何选择?

    安慰

    我更喜欢“控制器”,因为我喜欢隐藏$ scope并通过中间对象将控制器中的成员公开给视图。 通过设置这个*,我可以暴露我想从控制器暴露给视图的内容。 你也可以用$ scope做到这一点,我只是喜欢使用标准的JavaScript来做到这一点。 实际上,我是这样编码的:

    var vm = this;
    
    vm.title = 'some title';
    vm.saveData = function(){ ... } ;
    
    return vm;
    

    这让我感觉更清洁,并且很容易看到暴露在视图中的内容。 请注意我将返回的变量命名为“vm”,它代表viewmodel。 这只是我的惯例。

    在$范围内,我可以做同样的事情,所以我不会用这种技术加入或减损。

    $scope.title = 'some title';
    $scope.saveData = function() { ... };
    

    所以它取决于你。

    注射

    使用$ scope我需要将$ scope注入到控制器中。 我不需要用控制器来做到这一点,除非我需要它的其他原因(如$广播或手表,尽管我试图避免控制器中的手表)。

    更新我写了这篇文章关于2个选择:http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/


    $scope在Angular 2.0中被删除。 因此,使用this将是一个办法别人要遵循2.0更接近的角度发布的日期。


    我的观点是,JavaScript中的'this'有它自己的问题,并且为它添加​​另一个含义/用途并不是一个好主意。

    为了清楚起见,我会使用$ scope。

    UPDATE

    现在有'控制器为'语法,在这里讨论。 我不是粉丝,但现在它是一个更“官方”的AngularJS构造,值得注意。

    链接地址: http://www.djcxy.com/p/13627.html

    上一篇: Should I use `this` or `$scope`?

    下一篇: AngularJS : What is a factory?