如何使用AngularJS生成url编码的锚链接?

ran*_*guy 73 anchor urlencode angularjs

<a href="#/search?query={{address}}" ng-repeat="address in addresses">
  {{address}}
</a>
Run Code Online (Sandbox Code Playgroud)

如果我理解正确的话,会生成非url编码的链接.编码的正确方法是#/search?query={{address}}什么?

示例地址是1260 6th Ave, New York, NY.

Tos*_*osh 104

您可以encodeURIComponent在javascript中使用本机.此外,您可以将其设置为字符串过滤器以使用它.

以下是制作escape过滤器的示例.

JS:

var app = angular.module('app', []);
app.filter('escape', function() {
  return window.encodeURIComponent;
});
Run Code Online (Sandbox Code Playgroud)

HTML:

<a ng-href="#/search?query={{address | escape}}">
Run Code Online (Sandbox Code Playgroud)

(更新:适应Karlies的答案,ng-href而不是简单的使用href)

  • escape,encodeURI和encodeURIComponent(http://stackoverflow.com/a/12796866/377920)似乎存在问题.我想知道Angular是否有一些我们可以利用的内置编码功能.否则回答很好. (4认同)
  • 如果`address`未定义,这将返回`#/ search?query = undefined`.如果这不是您想要的,请参阅http://stackoverflow.com/a/31559624/179014下面的修改后的解决方案. (2认同)

asm*_*ier 21

#/search?query=undefined如果address未定义,@ Tosh的解决方案将返回

<a ng-href="#/search?query={{address | escape}}">
Run Code Online (Sandbox Code Playgroud)

如果您希望为查询获取空字符串,则必须将解决方案扩展到

var app = angular.module('app', []);
app.filter('escape', function() {
    return function(input) {
        if(input) {
            return window.encodeURIComponent(input); 
        }
        return "";
    }
});
Run Code Online (Sandbox Code Playgroud)

#/search?query=如果address未定义,则返回.


Rub*_*sch 14

您可以使用encodeUri过滤器:https://github.com/rubenv/angular-encode-uri

  1. 将angular-encode-uri添加到您的项目中:

    bower install --save angular-encode-uri

  2. 将其添加到您的HTML文件:

    <script src="bower_components/angular-encode-uri/dist/angular-encode-uri.min.js"></script>

  3. 将其作为app模块的依赖项引用:

    angular.module('myApp', ['rt.encodeuri']);

  4. 在您的视图中使用它:

    <a href="#/search?query={{address|encodeUri}}">

  • 我把它还原回原来的答案.这完全没问题,有人编辑它以完全改变意图. (2认同)
  • 当 Bower 模块只有三行长时,为什么要花这么长时间导入整个 Bower 模块呢?完全不必要的依赖...... (2认同)

Kar*_*ung 12

Tosh的回答是过滤器的想法完全正确.我建议就这样做.但是,如果这样做,则应使用"ng-href"而不是"href",因为在绑定结束之前跟随"href"会导致链接错误.

过滤:

'use strict';

angular.module('myapp.filters.urlEncode', [])

/*
 * Filter for encoding strings for use in URL query strings
 */
.filter('urlEncode', [function() {
  return window.encodeURIComponent;
}]);
Run Code Online (Sandbox Code Playgroud)

视图:

<a ng-href="#/search?query={{ address | urlEncode }}" ng-repeat="address in addresses">
  {{address}}
</a>
Run Code Online (Sandbox Code Playgroud)


Jan*_*män 6

这是一个有效的代码示例:

app.filter('urlencode', function() {
  return function(input) {
    return window.encodeURIComponent(input);
  }
});
Run Code Online (Sandbox Code Playgroud)

在模板中:

<img ng-src="/image.php?url={{item.img_url|urlencode}}"
Run Code Online (Sandbox Code Playgroud)