如何生成与AngularJS的URL编码锚链接?
<a href="#/search?query={{address}}" ng-repeat="address in addresses"> {{address}} </a>
如果我理解正确,将生成未经过url编码的链接。 什么是编码#/search?query={{address}}
的正确方法?
示例地址是1260 6th Ave, New York, NY
。
您可以在JavaScript中使用本机encodeURIComponent
。 此外,你可以把它变成一个stringfilter来利用它。
这里是制作escape
filter的例子。
JS:
var app = angular.module('app', []); app.filter('escape', function() { return window.encodeURIComponent; });
HTML:
<a ng-href="#/search?query={{address | escape}}">
(更新:适应卡里斯的答案,使用ng-href
而不是普通的href
)
@ Tosh的解决scheme将返回#/search?query=undefined
如果address
是未定义的
<a ng-href="#/search?query={{address | escape}}">
如果您希望为您的查询获取空string,则必须将解决scheme扩展到
var app = angular.module('app', []); app.filter('escape', function() { return function(input) { if(input) { return window.encodeURIComponent(input); } return ""; } });
这将返回#/search?query=
如果address
未定义。
你可以使用encodeUrifilter: https : //github.com/rubenv/angular-encode-uri
-
将angular-encode-uri添加到您的项目中:
bower install --save angular-encode-uri
-
将其添加到您的HTML文件中:
<script src="bower_components/angular-encode-uri/dist/angular-encode-uri.min.js"></script>
-
引用它作为您的应用程序模块的依赖关系:
angular.module('myApp', ['rt.encodeuri']);
-
在你的意见中使用它:
<a href="#/search?query={{address|encodeUri}}">
托什的回答有过滤想法完全正确。 我build议就这样做。 但是,如果你这样做,你应该使用“ng-href”而不是“href” ,因为在绑定parsing之前跟着“href”会导致一个不好的链接。
过滤:
'use strict'; angular.module('myapp.filters.urlEncode', []) /* * Filter for encoding strings for use in URL query strings */ .filter('urlEncode', [function() { return window.encodeURIComponent; }]);
视图:
<a ng-href="#/search?query={{ address | urlEncode }}" ng-repeat="address in addresses"> {{address}} </a>
这是一个工作代码示例:
app.filter('urlencode', function() { return function(input) { return window.encodeURIComponent(input); } });
并在模板中:
<img ng-src="/image.php?url={{item.img_url|urlencode}}"