angularjs - AugluarJS 截断尾随等号

标签 angularjs url parameters base64

AngularJS 在路由到它们时会截断尾随的等号。我有一个 base64 字符串,需要将其作为查询参数添加到 url(route)

例如:http://example.com/#!/updatepassword?code=NnuW3q49QW38Mf-Cg==

这加载为: http://example.com/#!/updatepassword?code=NnuW3q49QW38Mf-Cg

有解决办法吗?

最佳答案

如果您尝试将路由设置为字符串,则需要转义 = 符号。这是因为该字符在查询字符串中具有特殊含义 - 它将参数名称与其值分开。

因此,一种解决方案可能是:

var query = "code=NnuW3q49QW38Mf-Cg==";
$location.url("/some/path?" + encodeURIComponent(query));

什么encodeURIComponent()会做,它会替换所有特殊字符 - 例如 = 将被替换为 %3D。这将防止它被解释为键值分隔符。

如果您只想更改查询字符串参数,而不是整个 URL,您还可以使用 $location.search() 方法:

$location.search("code", "NnuW3q49QW38Mf-Cg==");

只需记住向该方法传递两个参数,而不是一个。如果您这样做:

$location.search("code=NnuW3q49QW38Mf-Cg==");

= 符号不会被转义,只会被剥离。

<小时/>

Angular内部使用parseKeyValue()函数来解析查询字符串,可以找到here 。您可以看到分割是通过 = 符号完成的。这就是他们被剥夺的原因。

但是如果你看一下.search() method implementation ,您会看到仅当您向 .search() 提供一个参数时才会调用 parseKeyValue()。如果您提供参数名称作为第一个参数,并提供值作为第二个参数,则不会调用它。

查看源代码还提出了另一种解决方案:

$location.search({"code": "NnuW3q49QW38Mf-Cg=="});

关于angularjs - AugluarJS 截断尾随等号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28894937/

相关文章:

C++ 非类型模板参数 : Is typedef of an integral type an integral type?

session - 为什么我们需要 session ,当我们已经有 cookies 的时候?

url - 提供 URL 链接时禁用 Youtube 自动播放

apache - 用作 MAMP 起始页 URL 的 index.* 文件在哪里?

angularjs - Angular 指令链接函数被调用两次

c# - 加参数后的SQL语句

sql-server - 选择全部作为多值参数的默认值

javascript - 页面重新加载时 ngRoute 不起作用

javascript - Angular-UI - 转换到相同状态更新 URL 但后退按钮损坏

javascript - 使用 AngularJS 进行跨域 HTML 解析