2015-05-14 37 views
3

我是angularjs的新手。我想知道angularjs控制器中的$scope和angularjs指令中的scope之間有什麼區別。

我試圖在控制器以使用範圍和我得到下面的錯誤:

Error: [$injector:unpr] Unknown provider: scopeProvider <- scope

+0

這[link](https://groups.google.com/forum/#!topic/angular/-w6FAkpDYzM)對你很有用 – Gunaseelan

回答

4

$scope是由$scopeProvider提供的服務。你可以把它注射到控制器中,指令或其他服務的採用了棱角分明的內置依賴注入:

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

這是簡寫形式,

module.controller(['$scope', function($scope) {...}])

在第一個版本的依賴注入推斷基於函數參數名稱(「$ scope」+「Provider」)的提供者名稱(「$ scopeProvider」)。 第二個版本也構建了這樣的提供者名稱,但在數組中使用了明確的'$scope',而不是函數參數名稱。這意味着您可以使用任何參數名稱而不是$scope

因此你結束了這樣的代碼: module.controller(['$scope', function(scope) {...}]) 其中scope可以是任何東西,它是一個函數參數的名稱,可能是fooa12342saa

依賴注入基本上做到這一點:

function controller(def) { 
    //def[def.length-1] is the actual controller function 
    // everything before are it's dependencies 

    var dependencies = []; 
    for(dep in def.slice(0, def.length-1)) { 
     dependencies.push(__get_dependency_by_name(dep)); 
    } 
    def[def.length-1].apply(dependencies); 
} 

我想,之所以使用「範圍」,而不是「$範圍」作爲一個依賴的名字都不行,現在是明確的。沒有定義「scopeProvider」。

+0

謝謝我能夠得到依賴注入器的工作,但我想知道關於隔離範圍,爲什麼我們在指令中使用隔離範圍而不是$ scope –

+0

隔離範圍仍然是範圍。閱讀文檔:https://docs.angularjs.org/guide/directive#isolating-the-scope-of-a-directive –