0

Ich habe eine Direktive erstellt, um etwas HTML zu kompilieren und dann an mein Element zu binden.

Hier die Richtlinie

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

ist und hier ist die Umsetzung:

<span id="id-of-span" bind-compile-html="{{TabsDomains.domainsLabelHtml}}"></span> 

Das attrs Objekt sieht gut aus und enthält den Wert der Zeichenfolge ich brauche, hier zu kompilieren ist das Objekt attr :

attrsObjectLog

Aber meine direkten ive gibt 0 als Wert anstelle der kompilierten Zeichenfolge zurück und ich verstehe nicht warum.

Wenn jemand erklären und helfen kann, wäre es wirklich hilfreich.

+0

haben Sie versucht, mit nur' return attrs.bindCompileHtml; '? Ich könnte falsch liegen, aber ich denke '$ eval' ist für eckige Ausdrücke, nicht HTML, vielleicht als eckiger Ausdruck wird dieser HTML als 0 betrachtet? Der 'bindCompileHtml'-Inhalt scheint bereit zu sein, wie er in dem DOM platziert wird. Wenn Sie zum Beispiel ausführen möchten, was im 'ng-click' steht, hätten Sie' $ eval' (nach dem Extrahieren des Inhalts des ng-clicks, nicht auf dem gesamten html) – Kaddath

+0

Sie hatten absolut Recht! Das hat gut funktioniert, danke! Ich werde es als Antwort auf die Frage veröffentlichen! –

+0

Gern geschehen, froh zu helfen! – Kaddath

Antwort

0

Wie gesagt in den Kommentaren der Frage, dies nur Bedürfnisse: Rückkehr attrs.bindCompileHtml

ich in den Kommentaren die Antwort einfügen hier: "$ eval ist für Winkel Ausdrücke, HTML nicht, vielleicht als eckiger Ausdruck wird dieser HTML-Code als 0 interpretiert? Der bindCompileHtml-Inhalt scheint bereit zu sein, in das DOM platziert zu werden, wie es ist "

Verwandte Themen