关闭AngularJS中的URL操作

Ore*_*ren 44 javascript address-bar location-provider angularjs route-provider

我正在尝试使用Angular编写我的第一个Web应用程序.

在正常模式下(html5Mode关闭),Angular强制地址的哈希部分看起来像"路径"(添加前导"/"),并对特殊字符进行编码 - 例如,它允许单个"?" 哈希中的"#"和用%3F和%23替换其他的#.

有没有办法关闭此功能?我不想使用$ locationProvider/$ routeProvider功能 - 我想自己解析哈希(在我的情况下,用户将在哈希中输入一些"自由文本"以在我的网站内搜索).

我读到routeProvider无法配置为使用正则表达式...

如果打开htmlMode,则不会强制地址的散列部分看起来像路径(没有前导"/"),但它仍然编码特殊字符.

我知道有些浏览器可能会编码/转义特殊字符,但如果用户设法在其地址栏中输入一些特殊字符,那么我不想更改它.

谢谢

gre*_*del 63

不确定这个的副作用,但它完成了工作.请注意,它将禁用角度应用程序中的所有位置操作,即使是预期的.

angular.module('sample', [])
    .config( ['$provide', function ($provide){
        $provide.decorator('$browser', ['$delegate', function ($delegate) {
            $delegate.onUrlChange = function () {};
            $delegate.url = function () { return ""};
            return $delegate;
        }]);
    }]);
Run Code Online (Sandbox Code Playgroud)

ES6变体:

angular.module('sample', [])
    .config(["$provide", $provide => {
        $provide.decorator("$browser", ["$delegate", $delegate => {
            $delegate.onUrlChange = () => { };
            $delegate.url = () => "";

            return $delegate;
        }]);
    }]);
Run Code Online (Sandbox Code Playgroud)

在Chrome 30,IE9,IE10中测试过.
灵感来自/sf/answers/1167464581/


Yan*_*ang 5

我使用angular.js的本地副本.搜索

$browser.onUrlChange(function(newUrl, newState) {
Run Code Online (Sandbox Code Playgroud)

$rootScope.$watch(function $locationWatch() {
Run Code Online (Sandbox Code Playgroud)

注释掉相应的行和angularjs将停止监视位置URL更改.