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

ソースコードを掘り下げた後、これが私が見つけたものです。これは、コントローラーをディレクティブに動的に割り当てるために別の属性を宣言する方法です。プランカーを参照してください。

アイデアは、コントローラー参照をディレクティブ名とは異なる属性に配置する方法を持つことです。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 に答える