37

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

4

6 回答 6

29

$scope控制器中执行依赖注入基于匹配变量 name 注入范围的$scope情况下,在这种情况下使用scopeas name 将不起作用。

对于指令的情况,注入是基于位置的,因此您可以命名您的变量ab任何东西。链接功能的指令顺序是

(scope, iElement, iAttrs, controller)

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

于 2013-10-10T06:58:40.653 回答
8

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

于 2013-10-16T21:16:18.530 回答
2

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

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

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

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

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接收,而在非依赖注入的情况下,作用域对象作为作用域或任何名称接收。

于 2017-11-07T01:39:52.240 回答
1

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

于 2015-07-01T14:28:36.587 回答
1

$in"$scope"表示范围值被注入到当前上下文中。

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

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

这是简写

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

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

function link( scope, element, attributes ) {
    //  Only scope 
}
于 2016-09-03T09:46:43.373 回答
0

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

于 2017-09-22T10:19:24.923 回答