10

在这个关于指令的文档中:http: //docs.angularjs.org/guide/directive

指令定义对象

指令定义对象向编译器提供指令。属性是:

name -当前范围的名称。可选,默认为注册时的名称。

我不明白为什么名称是当前范围的名称?注册时叫什么名字?如果我指定一个名称,如何使用它?

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

2 回答 2

18

在对源代码进行了一些挖掘之后,我发现:这是一种声明单独属性以动态地将控制器分配给指令的方法。见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 
于 2013-03-07T20:35:59.307 回答
1

您可以更改指令控制器的名称,因此如果您想要来自另一个指令的控制器,则使用新名称。这由ngForm您必须输入的指令使用,require:'form'而不是require:ngForm.

于 2017-05-11T11:29:02.343 回答