angularjs-无法更改按钮单击时的URL

时间:2019-09-02 19:44:33

标签: javascript angularjs

我想在单击按钮并执行一些代码时添加一个额外的查询参数。当作为右键单击菜单的一部分执行时,完全相同的代码对我来说很好用。但是,当我尝试通过单击按钮进行操作时,它不起作用(例如,我可以看到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);
 });

2 个答案:

答案 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中的特定字符串。我宁愿以某种方式直接在页面的控制器中修复该行为,但是我不确定如何并且已经尝试了很多事情。您认为这个解决方案还可以吗?