使用$ sce中的$ sceProvider功能

时间:2017-08-11 07:29:28

标签: angularjs angularjs-service angularjs-provider

从Angular文档中可以看出$sceDelegateProvider.resourceUrlWhitelist可以设置可信资源URL,但是我需要来自控制器的功能。

我想在我的服务中设置可信资源网址的白名单。因此,我只允许使用$sce服务,而不是提供商..

我试图实现这个示例,但它导致了一个错误( “$ SCE:不安全 需要安全/可信赖的值“):

this.renderUrl = this.$sce.getTrustedUrl(${this.baseUrl}) + `/x/y/?name=${this.name};

然后将${this.baseUrl}注入html:

renderUrl

有没有办法从<iframe ng-src="{{$ctrl.renderUrl}}"></iframe> 服务设置可信资源网址,因此它会被添加到可信资源网址的白名单中?

1 个答案:

答案 0 :(得分:1)

创建过滤器:

app.filter('trusturl', ['$sce', function ($sce) {
  return function(url) {
    return $sce.trustAsResourceUrl(url);
  };
}]);

在您的服务中:

// Injecting Filter in Service
app.service('trustUrlService', function ($scope,$filter) {

  $scope.trustUrl = function(url){
    return $filter('trusturl')(url);
  };

});

在Controller中使用如下:

app.controller("myCtrl", function($scope,trustUrlService) {  
  $scope.url = trustUrlService.trustUrl(url);
});

在模板中你可以这样使用:

<iframe ng-src={{ imageHref | trusturl }}" />