在Angularjs中,有没有特定的理由在控制器中使用$scope
而在指令链接函数中使用scope
(没有"$"
)?它只是一个约定还是其他什么?
答案 0 :(得分:28)
在控制器中执行$scope
的情况下,依赖注入基于匹配变量名$scope
来注入范围,在这种情况下使用scope
作为名称将不起作用。
对于指令的情况,注入是基于位置的,因此您可以命名变量a
或b
或任何事物。链接功能的指令顺序是
(scope, iElement, iAttrs, controller)
所以第一个元素始终是范围对象。
答案 1 :(得分:8)
John Lindquist也可以在这里找到关于这个问题的非常好的视频答案: http://egghead.io/lessons/angularjs-scope-vs-scope
答案 2 :(得分: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 被接收,而在非依赖注入的情况下范围对象收到范围或任何名称。
答案 3 :(得分:1)
这种行为的原因在于,与控制器不同,指令不使用依赖注入,而是传递由放置在视图后面的控制器创建的范围。 这非常棘手,所以你可以在不同的范围内重用你的指令。
答案 4 :(得分:0)
Cell Serial Number
KR0146U09A3 B150501388-A08
KR0146U09A3 B150501388-A09
KR0146U09A3 B150501388-A08
KR0146U09A3 B150501388-A09
KR0146U09B3 B150501395-A08
KR0146U09B3 B150501395-A08
KR0146U09B3 B150501395-A09
KR0146U09B3 B150501395-A09
KR0146U09C3 B150501391-A08
KR0146U09C3 B150501391-A08
KR0146U09C3 B150501391-A09
KR0146U09C3 B150501391-A09
KR0146U21A1 0000a000K2008438a
KR0146U21A1 0000a000K2008438a
KR0146U21A2 0000a000K2008438a
KR0146U21A2 0000a000K2008438a
KR0146U21A3 0000a000K2008438a
KR0146U21A3 0000a000K2008438a
KR0146U21B1 0000a000K2008447a
KR0146U21B1 0000a000K2008447a
KR0146U21B2 0000a000K2008447a
KR0146U21B2 0000a000K2008447a
KR0146U21B3 0000a000K2008447a
KR0146U21B3 0000a000K2008447a
KR0146U21C1 0000a000K2008404a
KR0146U21C1 0000a000K2008404a
KR0146U21C2 0000a000K2008404a
KR0146U21C2 0000a000K2008404a
KR0146U21C3 0000a000K2008404a
KR0146U21C3 0000a000K2008404a
中的$
表示范围值正在注入当前上下文。
"$scope"
是$scope
提供的服务。您可以使用Angular的内置依赖注入器将其注入控制器,指令或其他服务:
$scopeProvider
这是
的简写module.controller(function($scope) {...})
但是,module.controller(['$scope', function($scope) {...}])
可以是任何内容,它是函数参数名称,可以是scope
或foo
。
a12342saa
答案 5 :(得分:0)
" $" in" $ scope"表示将范围值注入当前上下文。但是,并非所有对范围的引用都基于依赖注入。