我创建了一个指令来编译一些html然后将它绑定到我的元素。
这是指令
export class BindCompileHtmlDirective implements ng.IDirective {
restrict = 'A';
link = (scope: ng.IScope, element: any, attrs: any, ctrl: any) => {
scope.$watch((scope) => {
console.log(attrs);
//Also tried attrs.BindCompileHtmlDirective which returns undefined
//Tried attrs.$attr.bindCompileHtml also which returns 0 too
return scope.$eval(attrs.bindCompileHtml);
}, (value) => {
console.log(value);
// In case value is a TrustedValueHolderType, sometimes it
// needs to be explicitly called into a string in order to
// get the HTML string.
element.html(value && value.toString());
var $phe = this.$compile(element.contents())(scope);
//element.after($phe);
});
}
constructor(private $compile: any) {
}
static factory(): ng.IDirectiveFactory {
const directive = ($compile: any) => new BindCompileHtmlDirective($compile);
directive.$inject = ['$compile'];
return directive;
}
}
angular.module('rundeckManager.directives')
.directive('bindCompileHtml', BindCompileHtmlDirective.factory());
这是实施:
<span id="id-of-span" bind-compile-html="{{TabsDomains.domainsLabelHtml}}"></span>
attrs对象看起来很好并且包含我需要编译的字符串的值,这里是attr对象:
但我的指令返回0作为值而不是编译的字符串,我不明白为什么。
如果有人可以解释并帮助它真的很有帮助。
答案 0 :(得分:0)
如问题评论所述,这只需要: return attrs.bindCompileHtml
我在这里的评论中粘贴了答案: “$ eval用于角度表达式,而不是HTML,可能作为一个角度表达式,这个HTML被证明为0?bindCompileHtml内容似乎已准备好放在DOM中,因为它是”