当我在浏览器地址栏中输入基本URL时,AngularJS路由器没有开始

时间:2015-01-02 12:52:33

标签: angularjs angular-routing

我在http://localhost:8080/使用Node.js为Angular应用提供服务。但是,当我在浏览器地址栏中输入此URL时,主页模板不会显示在应用程序内容区域中 - 仅显示顶部导航(这是外壳的一部分)。这是我的路由器配置:

angular
    .module('app')
    .config(configRouter);

configRouter.$inject = ['$routeProvider'];

function configRouter($routeProvider) {
    $routeProvider
        .when('/', {
            templateUrl: 'home/home.html',
            controller: 'Home',
            controllerAs: 'vm'
        })
        .when('/profile', {
            templateUrl: 'profile/profile.html',
            controller: 'Profile',
            controllerAs: 'vm'
        })
        .otherwise({ redirectTo: '/' });
}

有趣的是,当我点击顶部导航栏中的链接时,会加载正确的模板(包括主页模板)。这是我的顶级导航的代码:

<div id="navbar" class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li class="active"><a href="#/">Home</a></li>
        <li><a href="#/profile">Profile</a></li>
    </ul>
</div>

我在浏览器地址栏中尝试了各种网址组合,但没有任何效果:

http://localhost:8080/
http://localhost:8080/#
http://localhost:8080/#/

可能是什么问题?从应用程序中调用时,相同的URL是如何工作的?

提前感谢您的时间。

修改

BTW我几乎完全遵循John Papa的AngularJS风格指南示例。这可能与我在shell.html中嵌入的ng-view有关:

<div data-ng-controller="ShellController as vm">
    <div data-ng-include="'layout/topnav.html'"></div>

    <section id="content" class="content">
        <div data-ng-view class="shuffle-animation"></div>
    </section>
</div>

但他的确如此 - 请参阅here

3 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。

我在ng-view中使用main.html并将其加载到index.html(这是第一个加载的文件) 然后路由(控制器)没有从网址激活,但当我点击我的应用程序中的链接时,它工作。

然后我从ng-view移动main.html并直接放在index.html,然后它也从网址开始工作。

希望这有帮助。

答案 1 :(得分:0)

您可能需要为网页上的所有相关脚本指定基本网址:

<head>
    <base href="http://www.companyXYZ.com/scripts/" target="_blank">

有关基本标记的更多信息,请参见here

答案 2 :(得分:0)

这是angular-router的一个已知问题:https://github.com/angular/angular.js/issues/1213。讨论提出了一个不太好的解决方法。据我所知,angular-ui-router有同样的问题 - 请参阅这里的一些细节:https://github.com/johnpapa/generator-hottowel/issues/22。目前,最好的解决方案是避免使用ng-include嵌套ng-view。