gpt4 book ai didi

javascript - 在 ES6 + Angular 1.4 指令中插入

转载 作者:行者123 更新时间:2023-11-30 16:41:18 24 4
gpt4 key购买 nike

我目前正在尝试“新的”ES6 + Angular 组合,但在包含范围绑定(bind)的指令中插入 html 字符串时遇到了困难。

我尝试了以下选项:

现状

以下代码有效,但它使用过滤器而不是指令。

HTML 文件

 <div class="thumbnail-body">
<div ng-bind-html="vm.labels.hello | interpolate:this"></div>
</div>

模块中的过滤器(仍然是没有 ES6 的老式 Angular )

//TODO: .filter('interpolate', () => new InterpolateFilter())
.filter('interpolate', function ($interpolate) {
return function (text, scope) {
if (text) {
return $interpolate(text)(scope);
}
};
});

The reason why I am trying to move the interpolate logic towards a directive so I don't have to add a filter on multiple elements.

工作但丑陋的情况

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())

简而言之:我想在理想的情况下工作

最佳答案

试试这个:

class InterpolateDirective {
constructor($interpolate) {
this.template = '<div ng-bind-html="value"> </div>';
this.restrict = 'E';
this.scope = {
value: '='
};
this.$interpolate = $interpolate;

InterpolateDirective.prototype.link = (scope) =>{
scope.value = this.$interpolate(scope.value)(this);
}
}

public static Factory() {
var directive = ($interpolate) => {
return new InterpolateDirective($interpolate);
};
directive['$inject'] = ['$interpolate'];
return directive;
}
}
export default InterpolateDirective;


.directive('interpolate', InterpolateDirective.Factory());

指令中的作用域不像 Controller 中那样通过依赖注入(inject)注入(inject)。指令可以通过链接函数的第一个参数访问作用域。

指令的对象属性定义的范围不一样。通过范围隔离创建指令的 API 是配置的一部分。

关于javascript - 在 ES6 + Angular 1.4 指令中插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31939230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com