Angularjs:$ scope vs scope

时间:2013-10-10 06:29:13

标签: angularjs

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

6 个答案:

答案 0 :(得分:28)

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

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

(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) {...}]) 可以是任何内容,它是函数参数名称,可以是scopefoo

a12342saa

答案 5 :(得分:0)

" $" in" $ scope"表示将范围值注入当前上下文。但是,并非所有对范围的引用都基于依赖注入。