我将$ state服务添加到angularjs模块中的引用时出错

时间:2015-08-07 19:17:05

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

在我的教程项目中使用$state服务时遇到一些问题。

这是我的模块和配置定义:

(function () {
"use strict";
angular.module("gameManagement", ["ui.router", "ngAnimate", "ngResource"])

    .config(["$stateProvider", "$urlRouterProvider","$state", function ($stateProvider, $urlRouterPorvider,$state) {
        $urlRouterPorvider.otherwise("/game/MultiStepForm/step1");
        $urlRouterProvider.otherwise("/game/Home");
        $stateProvider
            .state("Home", {
                url: "/game/Home",
                templateUrl: "/app/game/GameView.html",
                controller: "GameController",
                controllerAs: "vm"
            });

        $stateProvider
            .state("Log", {
                url: "/Game/Log",
                templateUrl: "/app/Log/GameLogView.html",
                controller: "GameLogController",
                controllerAs: "vm"

                onEnter: function () {
                    $state.go("MultiStepForm");
                }
            });

        $stateProvider
        .state("MultiStepForm.view", {
            url: "/Game/MultiStepFormView",
            templateUrl: "/app/MultiStepForm/MultiStepFormView.html",
            controller: "MultiStepFormViewController",
            controllerAs: "MultiStepViewLogic"
        })

        $stateProvider
    .state("MultiStepForm.Edit", {
        url: "/Game/MultiStepFormEdit",
        templateUrl: "/app/MultiStepFormEdit/MultiStepForm.html",
        controller: "MultiStepFormEditController",
        controllerAs: "MultiStepEditLogic"
    })
    }]);
})();

我想使用这一行:

$state.go();

为此,我将 $ state 服务添加到引用中,但是当我添加到

引用我开始收到此错误的$state服务:

Uncaught Error: [$injector:modulerr] Failed to instantiate module sensorManagement due to:
Error: [$injector:unpr] Unknown provider: $state
http://errors.angularjs.org/1.4.2/$injector/unpr?p0=%24state
...

我知道为什么会出现上述错误?我错过了什么?

2 个答案:

答案 0 :(得分:2)

您只能在角度配置阶段内访问提供程序,$state依赖项在该阶段内不可用,因为$stateprovider,并且您已经在配置函数内访问它通过添加Provider前缀$stateProvider

如果您的目标是重定向路线,那么您可以在运行块中使用$state依赖项。从那里使用$state.go

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

答案 1 :(得分:1)

我相信你错过了你州的决议。你可以尝试这样的事情:

$stateProvider
    .state("Log", {
        url: "/Game/Log",
        templateUrl: "/app/Log/GameLogView.html",
        controller: "GameLogController",
        controllerAs: "vm",
        resolve: {$state: '$state'},
        onEnter: function ($state) {
            $state.go("MultiStepForm");
        }
});

有关onEnteronExit回调的工作原理的详情,请参阅documentation。基本上上面的问题没有正确地注入$state服务,因此,由于回调无法访问$state而无法转换状态。

您还需要将注入删除到配置中:

.config(["$stateProvider", "$urlRouterProvider", function ($stateProvider, $urlRouterProvider) {