angular-ui-router - 如何让 Angular UI 路由器尊重 "non-routed"URL

标签 angular-ui-router

这是我第一次使用 AngularUI Router,所以我想我犯了一个新手错误,希望有人能指导我。

我已将单页应用程序配置为在 HTML5 模式下使用 Angular UI 路由器,并且一切似乎都按预期工作。

.config([
    "$stateProvider", "$urlRouterProvider", "$locationProvider",
    function ($stateProvider, $urlRouterProvider, $locationProvider) {
        $stateProvider.state("concept", {
            url: "/concepts/:conceptKey",
            templateUrl: "/templates/concept-view.html",
            controller: "conceptViewController",
            resolve: {
                concept: [
                    "$stateParams", "conceptsApi",
                    function ($stateParams, conceptsApi) {
                        return conceptsApi.getConcept($stateParams.conceptKey);
                    }
                ]
            }
        });

        $urlRouterProvider.otherwise("/");

        $locationProvider.html5Mode(true);
    }
])

但是,同一页面还包含一些使用相对 URL 指向同一站点上其他静态页面的链接。在安装 Angular 路由之前,这些链接工作正常,但现在它们已损坏。具体来说,正确单击这些链接中的任何一个都会更改浏览器地址栏,但不会触发到该目标页面的导航。

我假设我需要添加一些东西来告诉路由配置忽略某些 URL 模式,但我没有找到任何信息告诉我如何做到这一点。请问有什么建议吗?

谢谢,
蒂姆

最佳答案

经过一番调查,我发现这个问题与 Angular UI Router 没有特别的关系。同样的行为也存在于原生的 AngularJS 路由机制中,是由 $location 实现的链接重写逻辑引起的。 ,如 this documentation 中所述.

问题的进一步讨论是here .

我找到了两种可能的解决方案,它们似乎都运行良好:

明确指向静态页面的链接 :通过包含属性 target="_self"在任何指向静态页面(即超出定义的 Angular 路由方案的页面)的链接中,它们将被 AngularJS 忽略并因此正确呈现。

禁用链接重写 :在 HTML5 模式下配置 Angular 路由时,支持两种语法格式。最简单的格式...
$locationProvider.html5Mode(true);
... 使用默认配置启用 HTML5 模式。但是,长格式语法提供了对其他配置属性的访问,其中之一通过禁用 Angular 拦截和重写链接 URL 的默认行为来解决上述问题:

$locationProvider.html5Mode({
    enabled: true,
    requireBase: false,
    rewriteLinks: false
});

我使用了第二个解决方案,它似乎对路由方案中定义的 URL 的行为没有不利影响。此解决方案似乎与 Angular UI Router 和 native AngularJS 路由同样适用。

关于angular-ui-router - 如何让 Angular UI 路由器尊重 "non-routed"URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28127661/

相关文章:

angular - ng 构建后只有主页在 Angular 站点上有效

AngularJS ui-router - 两个相同的路由组

javascript - 如何更改 ui-router 上持久 stateParams 的状态?

angularjs - 尝试基于常量在 Controller 中动态设置templateUrl

javascript - 如何在 AngularJS $rootScope 事件监听器中应用状态转换?

javascript - 带有正则表达式的 Ui-router 路由参数

angularjs - ui-router url 中的查询字符串参数?

javascript - 应用程序之间的路由

AngularJs 和登陆页面

javascript - AngularJS ui 路由器 $stateChangeStart 带有 promise 无限循环