2017-08-29 6 views
0

#hashtagintに任意の単語を作成できるパイプを作成しようとしています。routerLinkはパイプ経由で生成された場合には動作しません

これは#tagsをURLに変換するパイプ内の関数です。

urlifyHashtags(_text) : String { 
let hashtagRegex = /^#([a-zA-Z0-9]+)/g; 
let tempText = _text.replace(hashtagRegex, " <a [routerLink]=\"['/search/hash/aaa']\" routerLinkActive=\"active-link\">#$1</a>"); 
var hashtagRegex2 = /([^&])#([a-zA-Z0-9]+)/g; 
tempText = tempText.replace(hashtagRegex2, "<a [routerLink]=\"['/search/hash/' , 'Russ']\" routerLinkActive=\"active-link\"> #$2</a>"); 
return tempText; 
} 

そして、それがどこに行くか、これは次のとおりです。感謝すべてのヘルプ/アドバイス

<p *ngIf="!editable" [innerHTML] ="item.body | bodyHashtag"></p> 

DomSanitizer provider with SafeHtmlを使用することにより、[innerHTML]を使用してHTMLを注入しながら

+0

チェックブラウザのコンソールで説明したように、あなたは、実行時にコンポーネントを作成して追加することができます。セキュリティ上のエラーが発生していますか? – micronyks

+0

はい! "警告:HTMLのサニタイズにより一部のコンテンツが削除されました(http://g.co/ng/security#xssを参照)。私は何をする必要がありますか? – Hadi

答えて

0

あなたがHTMLをサニタイズしなければなりません。

import { Pipe, PipeTransform } from '@angular/core'; 
import { DomSanitizer, SafeHtml } from '@angular/platform-browser' 


export class myCustomPipe implements PipeTransform 
{ 
    constructor(private sanitized: DomSanitizer) {} 

    transform(value: string): SafeHtml{ 
     return this.sanitized 
        .bypassSecurityTrustHtml(this.urlifyHashtags(value)); 
    } 

    urlifyHashtags(_text) : String { 
      let hashtagRegex = /^#([a-zA-Z0-9]+)/g; 
      let tempText = _text.replace(hashtagRegex,"<a [routerLink]=\"['/search/hash/aaa']\" routerLinkActive=\"active-link\">#$1</a>"); 
      var hashtagRegex2 = /([^&])#([a-zA-Z0-9]+)/g; 
      tempText = tempText.replace(hashtagRegex2, "<a [routerLink]=\"['/search/hash/' , 'Russ']\" routerLinkActive=\"active-link\"> #$2</a>"); 
      return tempText; 
    } 

} 
+0

ありがとうございますが、ガンターは正しいです。あなたの解決策は、角度セキュリティモデルをバイパスするのに役立ちますが、routerLinkは機能しません。 – Hadi

0

角度は、HTMLを動的に追加処理しません。イベントは、micronyksの説明の方法を使用してHTMLを追加できますが、AngularはこのHTMLからルーターリンクを作成しません。 Angularのみが、コンポーネントテンプレートに静的に追加されたHTMLのHTML(セキュリティ目的のサニタイズを除く)を処理します。あなたが実際にこれを動的に構築する必要がある場合はあなたがが何ができるか

が動的に

<a [routerLink]="someStringFromComponentClass" routerLinkActive="active-link">{{boundValue}}</a> 

バウンド値を作成することですHow can I use/create dynamic template to compile dynamic Component with Angular 2.0?

+0

修正してください!今私はセキュリティのエラーを得ることはありませんが、それはまたURLとして動作しません。 – Hadi

+0

私はあなたの解決策を理解しているかどうか分かりません:(申し訳ありませんが、私は新しい角度になっています – Hadi

+1

合意しました! – micronyks

関連する問題