Angularjs:$scope vs scope

Angularjs:$scope vs scope,angularjs,Angularjs,在Angularjs中,在控制器中使用$scope,在指令链接函数中使用scope(不含“$”)是否有特定的原因?这仅仅是一种约定还是其他什么?当您在控制器中执行$scope时,依赖项注入基于匹配变量名$scope,在这种情况下,使用scope作为名称将不起作用 对于指令,注入是基于位置的,因此您可以命名变量a或b或任何东西。链接函数的指令顺序为 (范围、项目、iAttrs、控制器) 因此,第一个元素始终是范围对象。您也可以在这里找到John Lindquist对这个问题的一个非常好的视频答案:

在Angularjs中,在控制器中使用
$scope
,在指令链接函数中使用
scope
(不含
“$”
)是否有特定的原因?这仅仅是一种约定还是其他什么?

当您在控制器中执行
$scope
时,依赖项注入基于匹配变量名
$scope
,在这种情况下,使用
scope
作为名称将不起作用

对于指令,注入是基于位置的,因此您可以命名变量
a
b
或任何东西。链接函数的指令顺序为

(范围、项目、iAttrs、控制器)


因此,第一个元素始终是范围对象。

您也可以在这里找到John Lindquist对这个问题的一个非常好的视频答案:
.

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

“$scope”
中的
$
表示正在将作用域值注入当前上下文中

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

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

module.controller(['$scope', function($scope) {...}])
然而,
scope
可以是任何东西,它是一个函数参数名,可以是
foo
a12342saa

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

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

模块工厂方法,如控制器、指令、工厂、过滤器、服务、动画、配置和运行,通过依赖项注入(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接收,而在非依赖项注入的情况下,范围对象作为范围或任何名称接收。

它只是一个变量名,所以不是真的。感谢您的回答,类似的问题。我在这里还找到了一个详细的解释:我将后面的部分澄清为“对于指令链接函数的情况,注入是基于位置的,因此使用
scope
实际上只是惯例。”(我找不到任何好的解释来解释为什么这里不使用
$scope
,如果只是为了一致性的话)完美的解释,谢谢你指出了正确的方向。