2017-10-24 20 views
1

角度1.6。*のコントローラからの指令を使用する必要があります。AngularJSコントローラからの指令

私はコードをよく説明します。

コントローラ

$scope.directive = [ 
    "<span my-directive></span>", 
    "<span my-directive2></span>", 
    "<span my-directive3></span>" 
] 

HTML

<div>{{directive}}</div> 

私のソリューションは、次のとおりです。

コントローラ

directive.forEach(function (item) { 
    $compile(item)($scope).appendTo('.navbar'); 
}) 

HTML

<div class="navbar"></div> 

しかし、私の解決策は、DOM依存している、悪いソリューションです。
私はスマートな解決策が必要です。

アイデア?

ありがとうございます!

+0

MMMM、そこソリューションの多くであり、私はこれが仕事ではないことを見ている。しかし、最も重要なのは、このコードは何ですか? –

+0

[ほとんどの解決策](https://stackoverflow.com/questions/15279244/dynamically-add-directive-in-angularjs) '$ compile'を使用しますが、ディレクティブが –

答えて

1

で定義されています。

次の例を検討してください:

指令HTMLで

function MyBindCompileDirective($compile) { 
    return { 
     restrict: 'A', 
     link(scope, elem, attrs) { 
      attrs.$observe('myBindCompile',() => elem.html($compile(scope.myBindCompile)(scope).html())) 
     } 
    }; 
} 

angular 
    .module('app') 
    .directive('myBindCompile', MyBindCompileDirective); 

使い方を

<div ng-repeat="item in directives" my-bind-compile="item"></div> 
+0

ありがとう、別の方法ですが、DOMも依存しています。 とスコープが分離されているので、データを渡すことができません。 例 '' " – Daorithos

+0

隔離されたスコープの代わりに、' attr。$ observe'孤立した範囲を持つ例は、私にとってもっと関係があるように見えました。 '$ watch'の代わりに' $ observe'を使うように答えを更新しました。 –

+0

あなたのコードは私に問題を与えますが、私はあなたの考えを理解しています。 そして、$ compileとhtml()がなければ不可能だと私は理解しています。 ありがとうございました! – Daorithos

0

私はngRepeatを繰り返し、必要なものだけを変更して直接指示を出します。コレクションはあなたがng-bindng-bind-htmlと同様に、あなたのために、このバインディングを行います独自のディレクティブを作成することができ、コントローラ

<div ng-repeat="model in collection"> 
<span my-directive variable="model"></span> 
</div> 
+0

にバインドされている親に関しては、私は宣言できませんhtmlの指示。 – Daorithos

関連する問題