現在、「新しい」ES6 + Angular の組み合わせを試していますが、スコープ バインディングを含むディレクティブで html 文字列を補間することに行き詰まりました。
次のオプションを試しました:
現在の状況
次のコードは機能しますが、ディレクティブの代わりにフィルターを使用しています。
HTMLファイル
<div class="thumbnail-body">
<div ng-bind-html="vm.labels.hello | interpolate:this"></div>
</div>
モジュール内のフィルター (ES6 を使用しない古い学校の角度)
//TODO: .filter('interpolate', () => new InterpolateFilter())
.filter('interpolate', function ($interpolate) {
return function (text, scope) {
if (text) {
return $interpolate(text)(scope);
}
};
});
複数の要素にフィルターを追加する必要がないように、補間ロジックをディレクティブに移動しようとしている理由。
働いているが醜い状況
HTMLファイル
<interpolate value="vm.labels.hello" scope="this"></interpolate>
指令
class InterpolateDirective {
constructor() {
this.template = '<div ng-bind-html="value |interpolate:scope"></div>';
this.restrict = 'E';
this.scope = {value: '=',scope:'='};
}
}
export default InterpolateDirective;
モジュール
.directive('interpolate', () => new InterpolateDirective())
望ましい状況(まだ機能していない)
HTMLファイル
<interpolate value="vm.labels.hello"></interpolate>
指令
class InterpolateDirective {
constructor($interpolate,$scope) {
'ngInject';this.template = '<div ng-bind-html="value"> </div>';
this.restrict = 'E';
this.scope = {value: '='};
this.$interpolate = $interpolate;
this.$scope = $scope;
}
//optional compile or link function
link() {
this.scope.value = this.$interpolate(this.scope.value)(this);
}
}
export default InterpolateDirective;
モジュール
.directive('interpolate', () => new InterpolateDirective())
要するに:私は望ましい状況で働きたいです