2015-05-14 3 views
3

Я новичок в angularjs. Я хотел бы знать, в чем разница между $scope в контроллере angularjs и scope в директиве angularjs.

Я пытался использовать сферу в контроллере, и я получил ошибку ниже:

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

+0

Эта ссылка [https://groups.google.com/forum/#!topic/angular/-w6FAkpDYzM] полезна для вас – Gunaseelan

ответ

4

$scope является услугой, предоставляемой $scopeProvider. Вы можете вводить его в контроллеры, директивы и другие услуги с использованием встроенной в форсунке зависимости угловой в:

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

который является сокращением для

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

В первой версии Dependency Injector делает вывод имя поставщика («$ scopeProvider») на основе имени параметра функции («$ scope» + «Provider»). Вторая версия также создает имя провайдера, подобное этому, но использует явно'$scope' в массиве, а не имя параметра функции. Это означает, что вы можете использовать любое имя параметра вместо $scope.

Таким образом, вы в конечном итоге с кодом, как это: module.controller(['$scope', function(scope) {...}]) где scope может быть что угодно, это имя параметра функции, может быть foo или a12342saa.

Инжектор зависимость в основном делает это:

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 –

Смежные вопросы