在Angularjs中,是否有特定的原因在控制器中使用$scope
而在指令链接函数中使用scope
(没有"$"
)?这只是一个约定或其他什么?
回答
在控制器中执行$scope
的情况下,依赖注入根据变量名称$scope
匹配注入范围,在这种情况下使用scope
作为名称将不起作用。
对于指令的情况下,注射是基于位置的,所以你可以命名你的变量a
或b
或任何东西。链路功能的指令顺序是
(scope, iElement, iAttrs, controller)
所以第一个元素总是范围对象。
John Lindquist在这里可以找到对这个问题的非常好的视频答案: http://egghead.io/lessons/angularjs-scope-vs-scope。
完美的解释,谢谢指向正确的方向。 –
此行为的原因是,与控制器不同,指令不使用依赖项注入,而是它们传递由放置在视图后面的控制器创建的作用域。 这是非常棘手的,所以你可以在不同的范围重用你的指令。
$
in "$scope"
表示范围值正被注入到当前上下文中。
$scope
是由$scopeProvider
提供的服务。你可以把它注射到控制器中,指令或其他服务的采用了棱角分明的内置依赖注入:
module.controller(function($scope) {...})
这是简写形式,
module.controller(['$scope', function($scope) {...}])
然而,scope
可以是任何东西,它是一个函数参数名,可能是foo
或a12342saa
。
function link(scope, element, attributes) {
// Only scope
}
“$ scope”中的“$”表示范围值被注入到当前上下文中。但是,并非所有对范围的引用都是基于依赖注入的。
模块工厂方法如控制器,指令,工厂,过滤器,服务,动画,配置和运行通过依赖注入(DI)接收参数。在DI的情况下,您会注入范围对象以及美元前缀,即$范围。原因是注入的论点必须匹配注入能力对象后跟美元($)前缀的名称。
例如,可以注入的范围和下面给出元件对象到控制器:
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
}
};
});
总之,在依赖注入的情况下,范围对象被接收为$范围而在非依赖注入范围对象的情况下被接收为范围或与任何名称。
- 1. AngularJS分离范围:VS =
- 2. VAR VS此VS $范围在AngularJS(1.4)
- 3. $范围和Angularjs
- 4. 在Angularjs范围
- 5. 在AngularJs范围
- 6. AngularJS JSON范围
- 7. AngularJS范围
- 8. 范围angularjs
- 9. 全球范围内VS文件范围
- 10. AngularJS范围模式和范围方法
- 11. $范围问题angularjs
- 12. 范围变量AngularJS
- 13. AngularJS范围和Deferreds
- 14. Angularjs走样范围
- 15. AngularJs和ngResource范围
- 16. AngularJS - 范围差异
- 17. AngularJS变量范围
- 18. 与angularJS $范围。$父
- 19. AngularJS过滤范围
- 20. angularjs fullcalendar eventclick范围
- 21. Angularjs sessionStorage和范围
- 22. AngularJS HTTP GET范围
- 23. angularjs位置范围
- 24. AngularJS $适用范围
- 25. Angularjs中的范围
- 26. 修改$范围AngularJs
- 27. AngularJS - 理解范围
- 28. AngularJS - 范围搜索
- 29. AngularJS范围与GMaps
- 30. AngularJS $范围,功能
这只是一个变量名,所以不是真的。 – ivarni
类似的问题[这里](http://stackoverflow.com/questions/18719140/angular-link-function-scope-vs-scope/18719347#comment27583647_18719347) – gargc