これは、要素をターゲットにした後に$compileを利用して行うことができます。id
この例では、vanilla JSを追加して使用しましたが、jQuery など、さらに自由に使用できる場合があります。要素を取得$compile
したら、関連するコントローラーにそれを入れます。次の例を見てください...
<div ng-app="app" ng-controller="ctrl">
<input id="myInput" type="text" title="Title">
</div>
angular.module('app', [])
.controller('ctrl', function($scope, $compile) {
$compile(angular.element(document.getElementById('myInput')).attr('category-lookup', 'category-lookup'))($scope)
})
.directive('categoryLookup', function() {
return {
restrict: 'A',
link: function(scope, elem, attrs) {
console.log('directive registered')
}
}
});
JSFiddle リンク- デモ
また、「ページの読み込み時に動的に」とは、いくつかのことを意味します。完全に肉付けされた AngularJS エコシステムにいると仮定しましたが、コントローラーさえ持っておらず、何らかの方法でこのディレクティブをチェリーピックして「ロード」時にコンパイルする必要があるという考えが存在します。これを行う方法の核心的な例を次に示しますが、これは一般的に悪い習慣と見なされており、代わりに関連するコントローラーで上記のロジックを活用することをお勧めします。次のことを守ってください...
<div ng-app="app">
<input id="myInput" type="text" value="" title="Title">
</div>
angular.element(document).ready(function () {
var $injector = angular.injector(['ng', 'app']);
$injector.invoke(function($rootScope, $compile) {
$compile(angular.element(document.getElementById('myInput')).attr('category-lookup', 'category-lookup'))($rootScope)
});
});
JSFiddle リンク- デモ - コントローラなし