【发布时间】:2013-04-21 19:39:04
【问题描述】:
如何将实际 URL(带有斜杠、逗号等)作为 $routeParam 传递给 AngularJS 应用程序?
这将起作用: http://paprikka.github.io/le-bat/#/preview/asdadasda
这不会: http://paprikka.github.io/le-bat/#/preview/http://page.com
这也不会: http://paprikka.github.io/le-bat/#/preview/http%3A%2F%2Fpage.com
或者这个: http://paprikka.github.io/le-bat/#/preview/?url=http%3A%2F%2Fpage.com
详情
AngularJS 路由机制的设计不允许将带有斜杠的字符串作为查询参数传递。我可以理解这个决定背后的原因——我们不想在这里创建无状态服务器。
但是,在某些情况下,可能需要在路由中使用不同的分隔符或正则表达式。
我想创建一个应用程序,它采用 url 哈希字符串参数并将其内容加载到 iframe (link here)。路由以非常标准的方式设置(我使用的是 Coffeescript,但这个 sn-p 与纯 js 没有区别):
$routeProvider
.when('/preview/:src', {templateUrl: 'partials/preview.html',
controller: 'PreviewCtrl'})
.when('/preview', {templateUrl: 'partials/preview.html',
controller: 'PreviewCtrl'})
当然,我可以在 AngularJS 启动之前从哈希中加载 url,然后将其传递给库,但如果我还可以在更改范围内的数据时更新当前路由参数,那就太好了 - 这就是为什么我认为它更好不要避免使用 AngularJS API。
【问题讨论】:
-
抱歉,我没听清问题是什么?
-
嗯..我已经用更简洁的问题描述更新了这个问题。看看我添加的链接(希望这不会被视为垃圾邮件:))
-
你不能只使用查询参数样式编码吗?喜欢
http://example.com/#/preview/?url=http://page.com。另见:docs.angularjs.org/api/ng.$routeParams -
好吧,我不会问我是否可以:) 你检查了演示吗?而且,当然 - 我已经阅读了文档。
-
啊,当然,这就是问题所在!您是否尝试过使用
encodeURIComponent转义网址?结果类似于http://example.com/#/preview/?url=http:%3A%2F%2Fpage.com
标签: javascript angularjs url-routing