2015-10-12 4 views
0

Я создаю приложение, использующее угловые и угловые ui-router для маршрутизации на основе состояния. У меня есть несколько маршрутов в моем приложении, но один из них требует внимания. Состояние определяется следующим образомпроблема с uil-маршрутизатором angularjs с разрешением

state('profile', { 
      url: '/profile', 
      controller: 'ProfileController', //controller on a different file 
      resolve: { 
       user_profile: ['User', function (User){ 
        return User.getProfile(); //returns a json object 
       }] 
      }, 
      templateUrl: 'profile.html' 
     }) 

Код getProfile: getProfile: функция() { вар д = $ q.defer();

  $http.get('/profile') 
       .success(function(res){ 
        if (res.status == 'success'){ 
         d.resolve(res); 
        } else { 
         d.reject(); 
        } 
       }) 
       .error(function(reason){ 
        d.reject(reason); 
       }); 
      return d.promise; 
     } 

Теперь в моем файле контроллера У меня есть следующий код:

.controller("ProfileController", ['$scope',function($scope,user_profile){ 
    console.log(user_profile); 
}]); 

Дело в том, что решительность должна вводить разрешенные результаты в контроллере, на параметре имени User_Profile (потому что в ключах определение состояния, которое я использовал user_profile), и введенная зависимость имеет значение undefined, как указано в вызове console.log.

Я отлаживал свой код, и служба, которая извлекает профиль пользователя на сервере, работает очень хорошо, поэтому проблем нет. Даже если я использую возврат объекта на ключ разрешения user_profile, ошибка остается.

Другое дело, что если я, в определении состояния, задал свойство controller функции, определенной в определении состояния, тогда для зависимостей вводится правильное значение, но я не хочу этого, я хочу, чтобы зависимость впрыскивается на определенный контроллер и на встроенный контроллер.

Итак, что здесь может быть?

Заранее благодарим за любой ответ.

+0

где код 'getProfile'? У вас также есть 'ng-controller' в шаблоне? – charlietfl

+0

У меня нет директивы ng-controller на моем шаблоне, потому что в определении состояния я выставляю контроллер для состояния. Код getProfile() очень прост. Я отредактировал свой вопрос и добавил код – asolenzal

+0

вправо, просто проверяя контроллер, потому что использование обоих не является необычной ошибкой. – charlietfl

ответ

1

Вы используете строгий синтаксис DI для углового (массив строк для имен зависимостей, с функцией как конечный параметр массива), но вы не указали зависимость user_profile в массиве.

E.g.

.controller("ProfileController", ['$scope','user_profile',function($scope,user_profile) { console.log(user_profile); }]); 
+0

Не нужно, потому что если вы укажете профиль__зависимости пользователя в массиве, тогда angularjs выдает исключение, говорящее, что поставщик user_profile был не найдено. разрешить автоматическое внедрение зависимостей. – asolenzal

+0

@asolenzal no, вам нужны все инъекции в массиве и в надлежащем порядке – charlietfl

+1

@asolenzal вы неправы. Если угловой бросает эту ошибку, то это ключ к тому, что может быть вашей реальной проблемой ... –