TypeScript + AngularJS:指令在范围上返回0。$ eval

时间:2017-10-27 08:03:59

标签: angularjs typescript data-binding angularjs-directive angular-directive

我创建了一个指令来编译一些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对象:

attrsObjectLog

但我的指令返回0作为值而不是编译的字符串,我不明白为什么。

如果有人可以解释并帮助它真的很有帮助。

1 个答案:

答案 0 :(得分:0)

如问题评论所述,这只需要:         return attrs.bindCompileHtml

我在这里的评论中粘贴了答案: “$ eval用于角度表达式,而不是HTML,可能作为一个角度表达式,这个HTML被证明为0?bindCompileHtml内容似乎已准备好放在DOM中,因为它是”