【问题标题】:AngularJS routing not working during bootstrap, works after thatAngularJS路由在引导期间不起作用,之后工作
【发布时间】:2016-04-12 20:30:41
【问题描述】:

我已经做了几天了,我觉得我错过了一些东西。我想创建一个 webapp 并开始设置我的 angularjs 基础。在设置我的 angularjs 基础时,我遇到了路由问题。这个问题看起来像是一个竞争条件,但我似乎无法找到它所在的位置。

启动我的 angularjs 网站时,路由无法正常工作。即使将 $location.path("/dashboard"); 放在 module.run 中也不会显示正确的视图。但是,当我在加载网站后转到浏览器的地址栏并删除“#/dashboard”中的“仪表板”时,它会将我重定向到“#/dashboard”并显示正确的视图。引导我的 Angular Web 应用程序时,路由似乎不起作用。

我尝试了ngRouteUI-Router。两者的结果相同。

github 上的 Web 应用程序。

app.ts:

require(['angular', 'ui-router'], (angular) => {
angular.module('monetaryreign.services', []);
angular.module('monetaryreign.ui', []);
var app = angular.module('monetaryreign', ['ui.router', 'monetaryreign.services', 'monetaryreign.ui']);

app.run(startup)

startup.$inject = ['$location'];

function startup($location) {
    $location.path("/dashboard");
}

require(['angular', 'app/app.states'], (angular) => {
    angular.bootstrap(document, ['monetaryreign']);
});
});

app.states.ts:

import angular = require('angular');
import dashboard = require('app/dashboard/dashboard.controller');

function routes($stateProvider: ng.ui.IStateProvider, $urlRouterProvider: ng.ui.IUrlRouterProvider) {
var f = dashboard
var baseUrl = document.getElementById('base-url').getAttribute('value');

$stateProvider
    .state('dasboard', {
        url: '/dashboard',
        templateUrl: baseUrl + 'app/dashboard/dashboard.html',
        controller: 'DashboardController',
        controllerAs: 'vm'
    })

$urlRouterProvider.when('', '/dashboard');

$urlRouterProvider.otherwise('/dashboard');
}

routes.$inject = ['$stateProvider', '$urlRouterProvider'];

angular
.module('monetaryreign')
.config(routes);

【问题讨论】:

  • 您是否尝试删除该行:$urlRouterProvider.when('', '/dashboard');
  • 感谢您的评论,刚试过。很遗憾没有解决。
  • 并删除 $location.path("/dashboard");还有吗?
  • 如果我在 module.run 中删除该语句,则什么也不会发生。客户端路由不发生(路由不在url中添加'#')

标签: javascript angularjs visual-studio typescript angular-ui-router


【解决方案1】:

您应该将$urlProvider.html5mode(true) 添加到应用配置中,并将标签<base href="/"> 添加到HTML 的头部。

【讨论】:

  • 嗨,欢迎来到堆栈溢出。发布答案时,尽量提供更多信息:解释您发现的错误和您发布的解决方案:另请参阅如何回答:stackoverflow.com/help/how-to-answer
【解决方案2】:

尝试删除这些行。

app.run(startup)

startup.$inject = ['$location'];

function startup($location) {
    $location.path("/dashboard");
}

还有这个

$urlRouterProvider.when('', '/dashboard');

应该有效

【讨论】:

  • 感谢您的帮助,不幸的是它没有工作。当我输入 localhost 时,它仍然没有转到 localhost/#
猜你喜欢
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 2016-09-05
  • 1970-01-01
  • 2017-05-02
相关资源
最近更新 更多