2016-12-11 14 views
1

私はtypescriptでコーディングするだけでなく、angular2プロジェクトにも取り組んでいます。私は、サービスを持っている:文字列をhtml要素に変換する

@Component({ 
    selector: 'my-component', 
    templateUrl: 'app/component.template.html' 
}) 

export class MyComponent { 

    constructor(public myServie: MyService) { 
     this.myServie.get().then((data: any) => { 
      // data has html content 
     }); 
    } 
} 

サービスの結果は、このようなものです:

a ='<p> 
<a class="link1" href="#p1">link 1</a> 
<a class="link2" href="#p2">link 2</a> 
<a class="link3" href="#p3">link 3</a> 
</p>' 

私はこのコンテンツで検索することができますどのように、クラス=「リンク1」を持つ要素を見つけると、そのHREFを交換しますか?私はJQueryなどを使用したくありません。

+0

ないデータ 'A'が含まれていますか? –

+0

どのような角度またはタイプススクリプトが許可されているのかわかりませんが、もっとライブラリを含めたくない場合は、常にvanilla JSを使用するオプションがあります。このようなものはうまくいくはずです:document.getElementsByClassName( "link1")。href = "website.com"; https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName – DawnPatrol

+0

これをコンパイルしますか?つまり、これはDOMに入りますか?そうでなければ、正規表現 – Milad

答えて

1
<div [innerHtml]="data | safeHtml"></div> 

も参照してくださいIn RC.1 some styles can't be added using binding syntax

constructor(
    private elRef:ElementRef, 
    public myServie: MyService, 
    private cdRef:ChangeDetectorRef) { 
    this.myServie.get().then((data: any) => { 
     this.data = data; 
     this.cdRef.detectChanges(); // to ensure the DOM is updated 
     if(this.isViewInitialized) { 
      this.updateHrefs(); 
     } 
    }); 
} 

isViewInitialized = false; 
ngAfterViewInit() { 
    this.isViewInitialized = true; 
    if(this.data) { 
    this.updateHrefs(); 
    } 
} 

updateHrefs() { 
    this.elRef.nativeElement.querySelectorAll('p > a').forEach((e) => { e.href = 'newHref'; }); 

} 
+0

を使う必要があります。しかしそれは働かない。私はデータ形式のリモートレストAPIを取得しています。したがって、ngAfterViewInitはデータコンストラクタでバインドされる前に起動します。 –

+0

申し訳ありません、忘れてしまいました。それはもう少し複雑になります。私は私の答えを更新しています。 –

+0

私は自分の答えを更新しました。 –

関連する問題