<a href="#/search?query={{address}}" ng-repeat="address in addresses">
{{address}}
</a>
如果我理解正确,则会生成未经url编码的链接。正确的编码方式是#/search?query={{address}}
什么?
示例地址为1260 6th Ave, New York, NY
。
Answers:
您可以encodeURIComponent
在javascript中使用本机。另外,您可以将其设置为字符串过滤器以加以利用。
这是制作escape
过滤器的示例。
js:
var app = angular.module('app', []);
app.filter('escape', function() {
return window.encodeURIComponent;
});
的HTML:
<a ng-href="#/search?query={{address | escape}}">
(已更新:适应了Karlies的回答,ng-href
而不是简单地使用href
)
#/search?query=undefined
如果address
未定义,将返回。如果那不是您想要的,请在下面的stackoverflow.com/a/31559624/179014上查看经过修改的解决方案。
$locationProvider
级别上对其进行配置吗?
#/search?query=undefined
如果address
在中未定义@Tosh的解决方案将返回
<a ng-href="#/search?query={{address | escape}}">
如果您希望为查询获取一个空字符串,则必须将解决方案扩展到
var app = angular.module('app', []);
app.filter('escape', function() {
return function(input) {
if(input) {
return window.encodeURIComponent(input);
}
return "";
}
});
#/search?query=
如果address
未定义,将返回。
undefined
使用app.filter('escape', () => (input) => input !== undefined ? window.encodeURIComponent(input) : '');
您可以使用encodeUri过滤器: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}}">
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;
}]);
视图:
<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}}"