属性を使ってディレクティブに "テンプレート"を渡したいと思っています。ここで私が達成しようとしているものの陳腐な例を示します。ディレクティブの属性として式を持つテンプレートを提供する
このHTML:Hello Jim
:
<greeter person-name="Jim" greeting-template="Hello {{name}}"></greeter>
が出力を生成します。 greeting-template
属性に{{name}}
が親スコープで評価されますので、それはディレクティブリンク機能限り取得する前に、
function greeter($interpolate) {
var directive = {
link: link,
restrict: 'EA',
template: '<div>{{evaluatedTemplate}}</div>'
};
return directive;
function link(scope, element, attrs) {
scope.name = attrs.personName;
scope.evaluatedTemplate = $interpolate(attrs.greetingTemplate)(scope);
}
}
しかし、それは動作しません:
は、私はこのようなディレクティブで試してみました。
最終的には、attrs.greetingTemplate
〜の値が文字通りの文字列である必要があります。「Hello {{名前}}」。私はgreeting-template
の属性値を "Hello [name]"とし、補間する前に "["を "{{"に変換するなどの代替構文でこれを行うことができます。しかし、それは乱雑に感じる。結びつきについても見てきましたが、親のスコープに対するディレクティブを評価する方法は、私が複数の挨拶をしたときに問題を引き起こす可能性があります。
多分https://docs.angularjs.org/api/ng/directive/ngNonBindableを試してください – Phil
'greet'要素に' ng-non-bindable'属性を設定すると、 'greeting-template'属性が角度評価(良い)、それはまた、指示全体が評価されない(悪い)ことを防ぎます。それは答えではありません。 – Snixtor
'{{}}'の代わりにhtmlに異なる中カッコを使用し、それを自分で解析します。または、オプションオブジェクトを使用してコントローラからそれを渡す – charlietfl