2017-02-26 8 views
1

構文を使用してng-metadataにディレクティブを変換しようとしていますが、特定の部分を見つけられません。この指示にはelement.html()が必要ですが、新しい指示にどこが当てはまるのかわかりません。ディレクティブ内の要素から "html"を取得する

これは指令です。

angular.module('ngContenteditable', ['ngSanitize']). 
    directive('contenteditable', ['$sce','$sanitize', function($sce, $sanitize) { 
     return { 
      restrict: 'A', 
      require: '?ngModel', 
      link: function(scope, element, attrs, ngModel) { 
       if (!ngModel) return; 

       ngModel.$render = function() { 
        element.html($sanitize(ngModel.$viewValue || '')); 
       }; 

       element.on('blur keyup change', function() { 
        scope.$apply(readViewText); 
       }); 

       function readViewText() { 
        var html = element.html(); 
        if (attrs.stripBr && html == '<br>') { 
         html = ''; 
        } 
        ngModel.$setViewValue(html); 
       } 
      } 
     }; 
}]); 

これまでのところ、これはng-metadataバージョンのものです。

import { Directive, Inject, Self, Optional, Input, HostListener } from 'ng-metadata/core'; 

@Directive({ 
    selector: '[contenteditable]' 
}) 
export class ngDirective { 
    @Input() stripBr: string; 
    constructor(
     @Inject('ngModel') @Self() @Optional() private ngModel: any, 
     @Inject('$sce') private $sce: ng.ISCEService, 
     @Inject('$sanitize') private $sanitize: ng.sanitize.ISanitizeService) { 
    } 

    @HostListener('blur keyup change') 
    onNgChange() { 

    } 

    onReadViewText() { 
     let html = this.html(); // ... how do I get the HTML? 
    } 
} 
+0

$ elementサービスと$ element.html()が必要です。 ng-metadataに固有のものではありません。これはコードがリンク関数からコントローラに移動して戻ったときに行われる処理です。 – estus

+0

しかし '$ element'はどこから来たのですか? – Ciel

+0

依存性注入から。 https://docs.angularjs.org/api/ng/service/$compile#-controller- – estus

答えて

0

NGメタデータ@Directive@Componentのクラスは、実際には、コントローラクラスです。

$elementが他の依存関係としてコンストラクタに注入されなければならないと$element.html()のように使用することなど$scope$element、 - とディレクティブ・コントローラは、ローカルの依存関係を持っています。

+0

これはうまくいった。どうもありがとうございます。私はバカのように感じますが、私はワーキングコードで馬鹿です! – Ciel

+0

ようこそ。 – estus

関連する問題