2015-11-19 2 views
0

Я сделал небольшую скрипку здесь. В приведенном ниже примере имеется 3 контроллера:Порядок параметров угловой функции

1-й регулярный контроллер.

второе я изменил порядок конструктора контроллера параметрами

3rd присваиваемого значения локальных $ рамки вместо $ rootScope.


2-й контроллер показывает, что даже при изменении порядка и количества параметров значение по-прежнему присваивается корневой области. Из этого я заключаю, что угловой как-то знает имена параметров для функции, независимо от их порядка? (вроде как именованные параметры?) Это звучит странно для меня. Как имена параметров означают что-то вне собственных «фигурных скобок»?

3-й контроллер показывает, что все локальные области являются копией $ rootScope, а {{variable}} указывает на переменную внутри локальной области, а не на глобальную область корня.

Я прав в этих двух выводах?

index.html:

<!DOCTYPE html> 
<html> 
    <head> 
    <link rel="stylesheet" href="style.css"> 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script> 
    <script src="script.js"></script> 
    </head> 

    <body ng-app="myApp" ng-controller="myController"> 

    <div ng-controller="myController"> 
     <h3>Echo: {{one}}</h3> 
    </div> 

    <div ng-controller="myController2"> 
     <h3>Echo: {{two}}</h3> 
     <h3>Echo: {{three}}</h3> 
    </div> 

    <div ng-controller="myController3"> 
     <h3>Echo: {{three}}</h3> 
    </div> 

</body> 
</html> 

script.js

var app = angular.module('myApp',[]); 
app.run(function($rootScope) { 
    $rootScope.today = new Date(); 
}); 
app.controller("myController", function($rootScope, $scope){ 
    $rootScope.one = 'root scope one'; 
}); 
app.controller("myController2", function($scope, $scope, $rootScope){ 
    $rootScope.two = 'root scope two'; 
}); 
app.controller("myController3", function($scope, $scope, $rootScope){ 
    $scope.three = '~scope three'; 
}); 

выходы:

Echo: root scope one 

Echo: root scope two 

Echo: 

Echo: ~scope three 
+1

Да, инъекция с угловой зависимостью использует имена параметров, если вы не используете синтаксис альтернативного массива или поле ввода. Все это описано в руководстве: https://docs.angularjs.org/guide/di –

ответ

1
  1. инъекции зависимостей угловом может вывести услугу для инъекций на основе имя. Так что да, если вы укажете параметры в соответствии с именем служб, тогда Angular выберет правильную услугу, а порядок параметров не имеет значения. Это не является мини-безопасным, если вы будете минимизировать свой код, вам нужно использовать один из других подходов для инъекций. См. Раздел «Неявная аннотация» в руководстве «Угловое» к Dependency Injection.

  2. Существует один $rootScope, который вводится в каждый из ваших контроллеров, поэтому они не являются копиями друг друга, но являются одним и тем же объектом. Локальные области наследуют от $rootScope через прототипическое наследование. Таким образом, если вы попытаетесь получить доступ к свойству в локальной области, то угловой сначала будет проверять локальную область для свойства, но если он не существует, он будет искать родительскую область (затем родительскую область родительской области и т. Д.), См. Руководство по уклону от Scope, особенно раздел «Иерархии областей».

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