如何在angular中使用stateprovider?

时间:2015-07-29 06:09:19

标签: javascript angularjs angular-ui-router angular-ui angularjs-routing

尝试在angular中使用状态路由器:

var app =angular.module('myapp', ['ui.bootstrap','ui.router']);

app.controller('TabsDemoCtrl', function ($scope, $window) {

    $scope.tabs = [
        { title:'Orders', content:'Dynamic content 1' },
        { title:'Awaiting settlement', content:'Dynamic content 2' },
        { title:'Complete', content:'Dynamic content 3' }
    ];

});

app.config(function($stateProvider,$state) {
    // Now set up the states
    $stateProvider
        .state('orders', {
            templateUrl: '../partials/orders.html',
            controller: 'ordersCtrl'

        });

    $state.go('orders');
});

我收到此错误:

Uncaught Error: [$injector:modulerr] Failed to instantiate module WIP due to:
Error: [$injector:unpr] Unknown provider: $state

2 个答案:

答案 0 :(得分:1)

  

provider只能在配置阶段通过Provider后期修复进行访问您想要访问$state提供商,那么它将是$stateProvider

您无法在配置阶段访问$state$stateprovider

从功能中删除$state将解决您的问题。

要重新定向到默认状态,我希望您使用$urlRouterProvider&提及您的URL,当/orders与任何url不匹配时会重定向到state

<强>配置

app.config(function($stateProvider, $urlRouterProvider) {
    // Now set up the states
    $stateProvider
        .state('orders', {
            url: '/order',//just for demonstration
            templateUrl: '../partials/orders.html',
            controller: 'ordersCtrl'
        });
    $urlRouterProvider.otherwise('/orders');
});

答案 1 :(得分:0)

在app模块中使用.run

  

运行块 - 在创建并使用注入器后执行   启动应用程序。只有实例和常量才可以   注入运行块。这是为了防止进一步的系统   在应用程序运行时配置。

     

运行块是Angular中与main方法最接近的东西。跑步   block是需要运行以启动应用程序的代码。它   在配置完所有服务后执行   注射器已创建。运行块通常包含代码   很难进行单元测试,因此应该单独声明   模块,以便在单元测试中可以忽略它们。

app.run(function($state) { 
    $state.go('orders');
});

app.config(function($stateProvider) {
  // Now set up the states
  $stateProvider
    .state('orders', {
       url : '/orders',
       templateUrl: '../partials/orders.html',
        controller: 'ordersCtrl'
   });
});

SEE MORE In SO