用replaceState操作路由的方法封装

export class Router {
    ReplaceState(url, data) {
        var query = this.Generate(data);
        window.history.replaceState(url, "", query)
    }

    /**
     * 生成url
     */
    Generate(data) {
        var search = "?";
        for (var temp in data) {
            search += `${temp}=${data[temp]}&`;
        }
        search = search.substr(0, search.length - 1);
        return search;
    }

    /**
     * 解析search 
     */
    UrlSearch(key) {
        var search = window.location.search;
        if (search) {
            var searchObject = {};
            var queries = search.replace(/^\?/, '').split('&');
            for (var i = 0; i < queries.length; i++) {
                var split = queries[i].split('=');
                if (split[0] != "" && split[1] !== undefined) {
                    searchObject[split[0]] = decodeURIComponent(split[1]);
                }
            }
            return searchObject[key];
        } else {
            return "";
        }
    }

}

使用例子:

  添加:

    在window.location.href后加上a=1和b=2。

Router.prototype.ReplaceState(window.location.href, {a:1,b:2});

    修改之后将会变成xxxxxxxxxx?a=1&b=2。

  获取参数:

Router.prototype.UrlSearch("a");

 

posted @ 2018-03-05 16:43  浮缠  阅读(388)  评论(0)    收藏  举报