Подтвердить что ты не робот

`name` в директиве angular Определение?

В этом документе о директиве: http://docs.angularjs.org/guide/directive

Объект определения директивы

Объект определения директивы предоставляет инструкции компилятору. Атрибуты:

имя - Имя текущей области. Необязательно и по умолчанию используется имя при регистрации.

Я не понимаю, почему имя является именем текущей области? Какое имя при регистрации? Если я укажу имя, как его использовать?

app.directive('aaa', function() {
   return {
      name: 'bbb',
      link: function() {
          // how and where to use the new name `bbb`
      }
   }
}
4b9b3361

Ответ 1

После некоторого копания вокруг исходного кода это то, что я нашел: Это способ объявить отдельный атрибут для динамического назначения контроллера директиве. См. plunker.

Идея состоит в том, чтобы создать ссылку на контроллер в другом атрибуте, чем имя директивы. Если свойство name не указано, в качестве атрибута будет использоваться имя директивы.

var app = angular.module('angularjs-starter', []);

app.directive('myDirective', [ function() {
  return {
    name : 'myController',
    controller : '@',
    restrict : 'A',
    link : function(scope, elm, attr) {
      console.log('myDirective.link');
    }
  };
} ]);

app.directive('myDirective2', [ function() {
  return {
    controller : '@',
    restrict : 'A',
    link : function(scope, elm, attr) {
      console.log('myDirective2.link');
    }
  };
} ]);

app.controller('MyDirectiveController', [ '$scope', function($scope) {
  console.log('MyDirectiveController.init');
} ]);

app.controller('MyDirectiveController2', [ '$scope', function($scope) {
  console.log('MyDirectiveController2.init');
} ]);

app.controller('MyDirective2Controller', [ '$scope', function($scope) {
  console.log('MyDirective2Controller.init');
} ]);

Шаблон:

<h1 my-directive my-controller="MyDirectiveController">My Directive Controller</h1>
<h1 my-directive my-controller="MyDirectiveController2">My Directive Controller 2</h1>
<h1 my-directive2="MyDirective2Controller">My Directive 2 Controller</h1>

Вывод:

MyDirectiveController.init
myDirective.link
MyDirectiveController2.init
myDirective.link
MyDirective2Controller.init
myDirective2.link 

Ответ 2

Вы можете изменить имя контроллера директив, поэтому, если вы хотите, чтобы контроллер из другой директивы использовал новое имя. Это используется директивой ngForm, вы должны ввести require:'form' вместо require:ngForm.