0

У меня есть некоторые проблемы с использованием службы $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 service Я начну эту ошибку:

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 
... 

Любая идея, почему я получаю ошибку выше? Что мне не хватает?

+0

Как @Pankaj Parkar упоминает ниже в ответ '$ state' обыкновение быть доступны в' config' фазе, однако 'onEnter'/'onExit' имеет доступ ко всем разрешенным зависимостям. К этому моменту вы пытаетесь использовать '$ state' внутри' onEnter' и ожидаете инъекции в '.config' для обработки этого разрешения? – Matt

+0

@Matt, поэтому мне не нужна инъекция Если я использую onEnter/onExit? – Michael

+0

Это будет зависеть от контекста; вам придется вводить службу '$ state', но вам придется делать это в той области, в которой вы ее используете. Например, если вы разрешите службу '$ state' в том, что выглядит как' 'Log '', тогда ваш 'onEnter' /' onExit' для этого состояния будет иметь к нему доступ, а код выше должен делать то, что вы ожидаете , – Matt

ответ

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"); 
     } 
}); 

Смотрите documentation для получения дополнительной информации о том, как работают onEnter и onExit обратных вызовов. В основном вышеуказанный вопрос не вводит правильно службу $state и, следовательно, не может перейти из состояния (-ов) из-за обратного вызова, не имеющего доступа к $state.

Вы также хотите удалить инъекции в конфигурации:

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

Я пробовал ваше решение, но теперь я получаю эту ошибку: TypeError: Невозможно прочитать свойство '@' нулевого – Michael

+0

@Michael Я подозреваю, что это не связано ни с чем в коде, упомянутом выше. Вне некоторых опечаток в вопросе (E.G. '$ urlRouterPorvider') есть, вероятно, другие проблемы, которые я не вижу здесь. Но чтобы ответить на этот вопрос, этот ответ дал бы ваш 'onEnter' доступ к' $ state' – Matt

2

Вы можете только поставщик услуг доступа к внутренней конфигурации фазы углового, $state зависимость не будет доступна в этой фазе, поскольку $state является provider, и вы уже к нему доступ в функции конфигурации путем добавления Provider префикс как $stateProvider.

Если вы намереваетесь перенаправить маршрут, то вы можете использовать зависимость $state в блоке запуска. Используете ли $state.go оттуда

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

после загрузки состояния Я хочу активировать другое состояние. Любая идея, как я могу ее реализовать? – Michael

+0

@ Майкл. Я не понял тебя ... о каком состоянии ты говоришь? –