可以禁用 $locationProvider 和 $routeProvider 吗?

Posted

技术标签:

【中文标题】可以禁用 $locationProvider 和 $routeProvider 吗?【英文标题】:possible to disable $locationProvider and $routeProvider? 【发布时间】:2013-06-09 05:21:27 【问题描述】:

我可以禁用这些家伙吗?我在 asp.net mvc 应用程序中使用 angular.js,我不需要 angular 来控制与地址栏或链接相关的任何内容...

现在在禁用 html5 模式 ($locationProvider.html5Mode(false)) 下,它会将哈希和操作方法的名称添加到地址栏,例如:您转到 \Home\index,它会导航,然后地址栏文本会更改为 Home\index#\index。这不是很烦人吗?

如果我启用 html5 模式,它将完全停止加载页面(初始页面除外)。我尝试从最初加载的页面转到另一个页面 - 它更改了地址栏的文本(这次不添加主题标签)但不会加载页面本身。那不是令人沮丧吗?

【问题讨论】:

您可以通过在 .config() 调用中不包含任何依赖项来禁用它们。如果 html5Mode 不适合您,听起来您的配置有误。 它的 html5 模式默认是禁用的,对吧?但我希望角度服务完全不干扰地址栏 嗨,Agzam,您有没有找到解决此问题的方法? 同意;这有什么运气吗?我也有同样的问题 【参考方案1】:

这里有一个临时解决方案AngularJS 1.1.5 - automatically adding hash tag to URLs

答案解释了第一步(如上所述,添加了新的哈希前缀)

yourApp.config(['$locationProvider', function($locationProvider)
    $locationProvider.html5Mode(true).hashPrefix('!');
]);

第一位处理 Angular 干扰您的地址栏视觉上,但现在单击任何链接都无法正常工作(阅读:history.pushState

因此,正如用户@Kevin Beal 所指出的,解决方法是将<a>target 设置为_self 的一些变体

$('a[href]').attr('target':'_self')

或根据具体情况:

<a href="foo" target="_self">Foo</a>
<a href="http://some.external/bar" target="_blank">Bar</a>

虽然,为了方便和理智,我认为它是这些的组合。

标记无 target

<a href="foo">Foo</a>
<a href="http://some.external/bar">Bar</a>

JS

// If `http` protocol present, assume external link
$('a[href^="http://"]').attr('target':'_blank');

// Otherwise, assume internal link
$('a:not([href^="http://"])').attr('target':'_self');

值得注意的是,上述选择器需要正确的jQuery。

【讨论】:

这可行,但不是很优雅。我正在努力寻找一个优雅的解决方案。 @Devin — 同意。如果/当您这样做时,请发布您的发现。

以上是关于可以禁用 $locationProvider 和 $routeProvider 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何添加安装我自己的 LocationProvider?

Android 中获取LocationProvider的三种方法和获取定位信息

如果 WiFi 关闭,Android 的 network_provider locationprovider 从不返回任何内容?

Angularjs : $locationProvider.hashPrefix("!") ;

使用 locationProvider 时,刷新浏览器网页不会在 ui-router 中加载

Android Locationprovider 需要很长时间才能暂时不可用