2016-11-17 1 views
0

Я пытаюсь реорганизовать существующий Угловой проект для использования ES6-модулей и import операторов. Это работает для большинства приложений, но блоки resolve на моих маршрутах дают мне проблемы.AngularJS: route.resolve in ES6

Насколько я могу сказать, синтаксис должен быть таким же, как и раньше:

$stateProvider.state('stateName'), { 
    template: <div></div> 
    controller: 'stateCtrl' 
    controllerAs: 'ctrl' 
    resolve: { 
     someData: ['DataService', function(DataService){ 
      return DataService.getData(); 
     }] 
    } 
} 

Однако установив точку останова в someData говорит мне, что мой «DataService» не решена должным образом путем инъекции углам главного зависимости (или, скорее, : он разрешен правильно, но еще не инициализирован). Сервис регистрируется в соответствующем модуле, но его конструктор не вызывался до ввода функции someData.

Поскольку я думал, что я получил синтаксис неправильно, я немного экспериментировал и обнаружил, что некоторые другие Службы (созданные с тем же синтаксисом и зарегистрированные в том же модуле, что и DataService) фактически инициализированы и правильно введены в блок разрешений ,

У вас есть идеи, где искать или как я могу устранить эту проблему?

ответ

1

Если вы используете ES6, это должно быть так:

/* @ngInject */ 
export default function config($stateProvider) { 
    resolve: { 

    /* @ngInject */ 
    someData: (DataService) => DataService.getData() 
    } 
} 

Чтобы прочитать немного больше о ngInject смотрите на странице ng-annotate GitHub. Он делает инъекции для вас.

+0

Хорошо, но мне все еще нужен массив с строковым идентификатором, чтобы сделать это безопасным для минимизации, не так ли? Вышеизложенное является еще одним синтаксисом для функции (Dataservice) {return Dataservice.getData();} ' –

+0

А хорошо мы используем/* @ngInject */Я обновлю ответ – rrd

+0

Спасибо - я взгляну на ng -annotate! :) Между тем, я понял, что забыл включить вложенную зависимость «DataService», поэтому он не смог получить экземпляр. Синтаксис, показанный выше, отлично работает! –