如何避免添加前缀“unsafe”链接Angular-2?

时间:2016-11-23 00:21:02

标签: angularjs angular ionic2

我正在使用angular2ionic 2开发移动应用, 我有3 buttons callsmsemail,如下所示

          <a ion-button href="tel:{{contact.cellphone}}" color="primary">
            <ion-icon name="call"></ion-icon>
            Call
          </a>
          <a ion-button href="sms:{{contact.cellphone}}" color="secondary">
            <ion-icon name="text"></ion-icon>
            SMS
          </a>
          <a ion-button href="mailto:{{contact.email}}" color="dark">
            <ion-icon name="mail"></ion-icon>
            Email
          </a>

Callemail工作正常,但不是sms,似乎在我的表达式前面添加了unsafe:,它会变得像下面

<a color="secondary" ion-button="" ng-reflect-color="secondary" class="button button-md button-default button-default-md button-md-secondary" ng-reflect-href="unsafe:sms:+16475374201" href="unsafe:sms:+16475374201"><span class="button-inner">

即使我尝试了这个

      <a ion-button [attr.href]="'sms:'+contact.cellphone" color="secondary">
        <ion-icon name="text"></ion-icon>
        SMS
      </a>

仍然是同一个问题,

当我不使用角度绑定时,它工作正常,例如像

          <a ion-button href="sms:+1647654654" color="secondary">
            <ion-icon name="text"></ion-icon>
            SMS
          </a>

虽然它与棱角分明有关,但我也检查了config.xml并允许sms

<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />

更新

使用@Apuu解决方案后,它变得如下

          <a ion-button [attr.href]="'sms:'+contact.cellphone | safeUrl" color="secondary">
            <ion-icon name="text"></ion-icon>
            SMS
          </a>

1 个答案:

答案 0 :(得分:8)

您可以创建管道服务,将不安全的网址更改为安全网址。

创建名为safe-url.pipe.ts的管道服务。

import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
@Pipe({
  name: 'safeUrl'
})
export class SafeUrlPipe implements PipeTransform {
  constructor(private domSanitizer: DomSanitizer) {}
  transform(url) {
    return this.domSanitizer.bypassSecurityTrustResourceUrl(url);
}
}

然后在你的视图中使用。
示例:

<a ion-button [src]="'some_url' | safeUrl" color="secondary">
     <ion-icon name="text"></ion-icon>
     SMS
</a>

注意:不要忘记在app.module.ts中注入此管道服务

import { SafeUrlPipe } from './shared/safe-url.pipe'; //make sure your safe-url.pipe.ts file path is matching.

在节点模块声明部分。

@NgModule({ declarations: [SafeUrlPipe],...});