2016-05-26 3 views
0

Я использую ui-router и пытаюсь использовать решение без успеха. Вот мой app.js состояние выглядит

.state('addInvestment', { 
    url: '/addUpdateInvestment', 
    templateUrl: 'js/angular/modules/investment/views/AddUpdateInvestment.html', 
    resolve: { 
     InvestmentTypes: ["investmentService", function (investmentService) { 
      console.log("Resolving dependency..."); 
      return investmentService.getInvestmentTypes(); 
     }] 
    } 
}) 

Он называет мое обслуживание просто отлично, и я знаю, что возвращает данные службы просто отлично, потому что я использую эту услугу в нескольких местах в моем приложении.

Вот мой контроллер выглядит следующим образом:

angular.module('InvestmentModule') 
    .controller('AddUpdateInvestment', 
    ['$scope', 'toaster', '$state', '$stateParams', '$wizard', 'investmentService', 'InvestmentTypes', 
    function ($scope, toaster, $state, $stateParams, $wizard, investmentService, InvestmentTypes) { 
     $scope.modalData = {}; 
     $scope.modalData.investmentTypes = InvestmentTypes.items; 
    }]); 

Когда я загрузить страницу, я вижу следующее в хроме:

Chrome Error displayed

ответ

0

Наконец, После так много борьбы, я сделал это работает. В моей службе возникла проблема, когда после получения ответа он вызывал метод, называемый handleResponse. Но этот метод был не возвратным типом фабрики. Я не знаю, как это имеет значение, если я вызываю это из разрешения Vs, называя его регулярной службой в контроллере. Но это почему-то нарушило решимость. Вот мой старый сервис ..

angular.module('InvestmentModule').factory('investmentService', ['$rootScope', '$http', '$q', function($rootScope, $http, $q){ 
    return{ 

     getInvestmentTypes:function() 
     { 
      return $http.get(this.webServiceUrl+'getAllInstitutionsForDisplay').then(handleResponse, handleError); 
     } 
} 
function handleSuccess(response) 
    { 
     return response.data; 
    } 

    function handleError(response) { 
     // The API response from the server should be returned in a 
     // nomralized format. However, if the request was not handled by the 
     // server (or what not handles properly - ex. server error), then we 
     // may have to normalize it on our end, as best we can. 
     if (
      ! angular.isObject(response.data) || 
      ! response.data.message 
     ) { 
      return($q.reject("An unknown error occurred.")); 
     } 
     // Otherwise, use expected error message. 
     return($q.reject(response.data.message)); 
    } 
}]); 

С новым кодом, я добавил код в handleSucess в самом методе, как показано ниже ..

getInvestmentTypes:function() 
     { 
      return $http.get(this.webServiceUrl+'getAllInstitutionsForDisplay').then(function(response){return response.data}, handleError); 
     } 

я мог бы сделать подобную вещь для handleError, как я полагаю ..

НО, но сейчас он прекрасно подходит для меня.

Только проблема такого подхода заключается в том, что он нарушает СУХОЙ подход .. Любое предложение, чтобы улучшить его будет понятно ..

0

Вы должны удалить запятую. Затем вы должны загрузить контроллер после того, как оно было выполнено. Почти вы можете попытаться использовать этот контроллер в своем состоянии, что-то вроде этого.

.state('addInvestment', { 
     url:'/addUpdateInvestment', 
     controller: 'AddUpdateInvestment as aui', 
     templateUrl:'js/angular/modules/investment/views/AddUpdateInvestment.html', 
     resolve: {InvestmentTypes: ['investmentService', function(investmentService) { 
      console.log("Resolving dependency..."); 
      return investmentService.getInvestmentTypes(); 
     }]}, // this will crash if you dont specify other parameter to the state. 
    }) 

EDIT:

Проверьте это исправить проблему

InvestmentTypes: ['investmentService', // use single quotes 

EDIT 2:

кажется, что введение в решимостью, как это:

resolve: { 
    InvestmentTypes: function(investmentService) { 
      console.log("Resolving dependency..."); 
      return investmentService.getInvestmentTypes(); 
     } 
} 

Пожалуйста, посмотрите на wiki here

+0

Я попробовал предложенное решение, и он по-прежнему бросает ту же ошибку в хромированной консоли. –

+0

Я отредактировал, проверяю, исправляют ли одиночные кавычки свою проблему –

+0

Mateo, к сожалению, не повезло. Такая же ошибка. –

0

Я думаю, что нашел проблему.

В вашей решимости вы имеете InvestmentTypes в кавычках

resolve: { 
    'InvestmentTypes': ['investmentService', function(investmentService){ 
     return investmentService.getInvestmentTypes(); 
    }] 
} 

если вы измените его, чтобы быть

resolve: { 
    InvestmentTypes: ['investmentService', function(investmentService){ 
     return investmentService.getInvestmentTypes(); 
    }] 
} 

Он должен работать. Я раздвоенный свой plunker, если вы откроете консоль Dev он должен войти на консоль

http://plnkr.co/edit/KOxgOqsGJcTD1URuHEOn?p=preview

+0

Джордж, я попробовал, и у меня все еще такая же проблема. Я также попытался удалить цитаты в прошлом, и это не сработало. –

+0

@ AndyJohnson. Если вы проверите Plnkr, есть тег «ng-app» на html, есть ли у вас это в вашем проекте? – George

+0

Да .. Мое приложение на 100% угловатое, и до сих пор другие вещи, которые я делал, работают нормально. Я на самом деле забыл добавить ng-приложение на свой Plnkr вчера –

Смежные вопросы