【问题标题】:Angularjs: $scope vs scopeAngularjs:$范围与范围
【发布时间】:2013-10-10 06:29:13
【问题描述】:

在 Angularjs 中,是否有特定的理由在控制器中使用 $scope 并在指令链接功能中使用 scope(没有 "$")?这只是一个约定还是其他什么?

【问题讨论】:

  • 这只是一个变量名,所以不是。
  • 类似问题here

标签: angularjs


【解决方案1】:

当您在控制器中执行$scope 时,依赖注入会根据匹配变量名称$scope 来注入作用域,在这种情况下使用scope 作为名称将不起作用。

对于指令的情况,注入是基于位置的,因此您可以将变量命名为 ab 或任何名称。链接函数的指令顺序为

(scope, iElement, iAttrs, controller)

所以第一个元素总是范围对象。

【讨论】:

  • 感谢您的回复。我在这里也找到了详细的解释:thinkster.io/pick/aw9kWmdnik/angularjs-scope-vs-scope
  • 我会将后半部分澄清为“对于指令链接函数的情况,注入是基于位置的,因此使用scope 确实只是惯例。” (我找不到任何好的解释为什么这里也没有使用$scope,如果只是为了保持一致性)
【解决方案2】:

您还可以在此处找到 John Lindquist 对这个问题的一个非常好的视频答案: http://egghead.io/lessons/angularjs-scope-vs-scope.

【讨论】:

  • 完美的解释,感谢您指出正确的方向。
【解决方案3】:

控制器、指令、工厂、过滤器、服务、动画、配置和运行等模块工厂方法通过依赖注入 (DI) 接收参数。在 DI 的情况下,您注入带有美元前缀的 scope 对象,即 $scope。原因是 injected arguments 必须与 inject-able objects 的名称匹配,后跟美元 ($) 前缀。

例如,您可以将范围和元素对象注入到控制器中,如下所示:

module.controller('MyController', function ($scope, $element) { // injected arguments });

当指令链接器函数等方法不通过依赖注入接收参数时,您只需传递 scope object 而不使用美元前缀,即 scope。原因是传递的参数被其调用者接收。

module.directive('myDirective', function () // injected arguments here 
{ 
    return { 
         // linker function does not use dependency injection 
         link: function (scope, el, attrs) { 
            // the calling function will passes the three arguments to the linker: scope, element and attributes, in the same order 
         } 
    }; 
});

简而言之,在依赖注入的情况下,范围对象作为$scope接收,而在非依赖注入的情况下范围对象范围或任何名称接收。

【讨论】:

    【解决方案4】:

    这种行为的原因是,与控制器不同,指令不使用依赖注入,而是传递由放置在视图后面的控制器创建的范围。 这非常棘手,因此您可以在不同的范围内重用您的指令。

    【讨论】:

      【解决方案5】:

      "$scope" 中的$ 表示作用域值被注入到当前上下文中。

      $scope$scopeProvider 提供的服务。您可以使用 Angular 内置的依赖注入器将其注入到控制器、指令或其他服务中:

      module.controller(function($scope) {...})
      

      这是的简写

      module.controller(['$scope', function($scope) {...}])
      

      但是,scope 可以是任何东西,它是一个函数参数名称,可以是fooa12342saa

      function link( scope, element, attributes ) {
          //  Only scope 
      }
      

      【讨论】:

        【解决方案6】:

        “$scope”中的“$”表示范围值被注入到当前上下文中。但是,并非所有对作用域的引用都基于依赖注入。

        【讨论】:

          猜你喜欢
          • 2013-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-22
          • 2014-02-22
          • 2023-03-27
          • 2014-11-24
          相关资源
          最近更新 更多