我想在单击按钮并执行一些代码时添加一个额外的查询参数。当作为右键单击菜单的一部分执行时,完全相同的代码对我来说很好用。但是,当我尝试通过单击按钮进行操作时,它不起作用(例如,我可以看到URL发生了变化,但是在所有angularjs内部代码运行之后,它返回了先前的值,并且未附加我的额外搜索参数)。>
这是我正在尝试的代码(我尝试添加最后一行,但没有改变结果):
addParameterToUrl(paramName, value) {
const urlParams = new URLSearchParams(window.location.search);
urlParams.set(paramName, value);
const newQuery = `${window.location.pathname}?${urlParams.toString()}`;
history.pushState(null, "", newQuery);
SW.serviceLoader.Location.path(newQuery, false);
}
是否可以通过单击按钮(输入类型=“ button”)来更改URL?
在阅读了多个线程和文档并尝试了多种方法之后,我终于明白了:
.finally(() => {
Spinner.stopSpinner("updateBooking");
this.onReload();
Timeout(() => {
this.beforeUnload();
}, 0);
});
答案 0 :(得分:0)
在将此代码(基于我在上一条注释中提到的线程)添加到app.js中之后,我的代码现在又可以工作了:
app.config(["$provide", $provide => {
$provide.decorator("$browser", ["$delegate", $delegate => {
$delegate.onUrlChange = () => { };
$delegate.url = () => "";
return $delegate;
}]);
}]);
如何再次检查这是否带来了任何问题?
答案 1 :(得分:0)
我已将此代码添加到主app.js中,并且确实起作用:
app.config(["$provide", function ($provide) {
$provide.decorator("$browser", ["$delegate", "$window",
function ($delegate, $window) {
// normal anchors
const ignoredPattern = /^#[a-zA-Z0-9].*/;
const originalOnUrlChange = $delegate.onUrlChange;
$delegate.onUrlChange = function (newUrl, newState) {
if (ignoredPattern.test($window.location.hash)) return;
if ($window.location.href.indexOf("stolenids") >= 0) return;
originalOnUrlChange.apply($delegate, arguments);
};
const originalUrl = $delegate.url;
$delegate.url = function (url, replace, state) {
if (ignoredPattern.test($window.location.hash)) return $window.location.href;
if ($window.location.href.indexOf("stolenids") >= 0) return $window.location.href;
return originalUrl.apply($delegate, arguments);
};
return $delegate;
}]);
}]);
我不太喜欢它,因为它使用了我需要添加到URL中的特定字符串。我宁愿以某种方式直接在页面的控制器中修复该行为,但是我不确定如何并且已经尝试了很多事情。您认为这个解决方案还可以吗?