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

An error when I add $state service to my references in angularjs module

我在教程项目中使用 $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
...

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

您只能在 angular 的配置阶段访问提供程序,$state 依赖项在该阶段不可用,因为 $stateprovider,而您是已经通过附加 Provider 前缀(如 $stateProvider)在配置函数中访问它。

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

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

我相信您缺少您所在州的解决方案。你可以尝试这样的事情:

$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) {