如何使用$ interpolate对模板变量的表达式进行url编码?

时间:2015-06-02 11:29:23

标签: javascript angularjs angularjs-interpolate

我有一个变量

  

x =“http://example.com?a= {{a}}& b = {{b}}

然后在

中使用此变量
  

NG-SRC = {{X}}

因此,对我来说,对变量a和b进行url编码非常重要。

我现在所做的是:

var func = $interpolate($scope.x);
            var url = func($scope);
            return  $sce.trustAsResourceUrl(url);

我的问题是当a或b包含空格时,它们不是url编码的。

如何告诉$ interpolate函数对变量a和b进行url编码?

1 个答案:

答案 0 :(得分:4)

  

$interpolate服务会评估{{}}内容并获取   评估范围时,范围内的那些值。

如果您想看到所拍摄的网址,则不会在任何地方对参数进行编码。您需要使用a javascript在b插值中对{{}}以及encodeURIComponent进行编码。为此,您需要在范围内创建一个包装方法,该方法将调用encodeURIComponent方法并返回编码URL,方法如下所示。

$scope.encodeContent = function(data){
     return encodeURIComponent(data);
}

此后,您的URL看起来像http://www.example.com/images.jpg?a={{encodeContent(a)}}&b={{encodeContent(b)}}

在将其附加到src img标记时,您需要首先评估插值&然后你就可以把这个网址视为你现在所信任的。

<强>标记

<img src="{{trustedUrl(x)}}" width="50" height="50"/>

<强>代码

$scope.trustedUrl = function(url){
   var interpolatedUrl = $interpolate(url)($scope)
   return $sce.trustAsResourceUrl(interpolatedUrl)
};

Working Plunkr