从Angular中删除hashchange事件,或阻止Angular重写锚链接

qJa*_*ake 11 javascript anchor angularjs angular-routing

我们有一个使用Angular的项目,但仅限于UI绑定/ AJAX方面,而不是任何类型的路由或SPA功能.

我们希望能够#section-2在我们选择的CMS中编写的文章中使用锚点链接(),以及使用其他页面的锚点链接(/my-page#section-C),但是Angular #/section-2会将这些链接重写为,这会破坏CMS设置的锚点链接.

无法扩充CMS以修改锚链接的处理方式.

有可能:

  1. hashchange从Angular中删除事件绑定?我看到这个事件附加在源文件中src/ng/browser.js,它处理一些路由和链接重写,但是它在一个闭包内部,所以不能直接访问它(我们从CDN链接到Angular所以不可能修改Angular源代码,加上我们不想维护自己的"自定义"Angular源代码.

  2. 设置一个选项或调用一个配置方法,最终禁用Angular的整个路由方面,并防止它重写任何类型的链接?(或者,有没有办法不包括Angular的这部分,但仍保留控制器/ UI绑定/ AJAX功能?)

请注意,我已经尝试过这个:

$locationProvider.html5Mode(true)
Run Code Online (Sandbox Code Playgroud)

但是,它会使网站上的所有其他链接无法运行,因为所有链接都通过Angular进行处理.因此,如果我链接到主页(<a href="/">Home</a>)并单击带有html5modeon的链接,则链接不执行任何操作.

qJa*_*ake 2

作为某种解决方法(当然不是最佳实践),我最终修改了 Angular 源代码以删除 URL 重写。

我做了一些更改,但我相信导致锚链接再次起作用的是在 Angular 源代码return;的第 844 行添加了一条声明:location.js

https://github.com/angular/angular.js/blob/master/src/ng/location.js#L844

这会绕过大部分 URL 重写功能。

我还完全删除了 的第 262-264 行browser.js,这删除了 ​​Angular 对hashchange事件的钩子:

https://github.com/angular/angular.js/blob/master/src/ng/browser.js#L262-264

这似乎并没有影响 Angular 的任何绑定功能,但它确实导致锚链接再次开始工作。