在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