2015-09-24 3 views
-3

У меня есть 2 функции первого запуска с угловым контроллером, а вторая загрузка состояния из базы данных, проблема в том, что JavaScript является асинхронным, переменная $scope.info.loadState была не определена, когда я использую в функции поиск я найти функцию .done, как решение этой проблемы, но теперь при запуске контроллер получает следующую ошибку Error: loadByIdAssetState(...) is undefined кода функции является следующимиОШИБКА: функция (...) не определена

angular.module('assetModule') 
    .controller('assetEditCtrl', ['selectedService','assetRESTService' 
          ,'assetStateRESTService','$location', '$modal' 
          ,'$scope', assetEditCtrl]); 

function assetEditCtrl (selectedService, assetRESTService, assetStateRESTService, $location, $modal, $scope) { 
     $scope.file = {}; 
     $scope.data = {}; 
     $scope.info = {}; 
initCtrl(); 

function initCtrl() { 
    $scope.info.selected = {}; 
    if(selectedService.getSelected() != undefined){ 
    $scope.file.asset = selectedService.getSelected(); 
    selectedService.setSelected(undefined); 
    $scope.info.loadState = loadByIdAssetState($scope.file.asset.assetState_id) 
    .done(function(state) { 
     console.log(state); 
     $scope.file.asset.stateName = state.state; 
     return state; 
    }); 
    console.log($scope.info.loadState); 
    $scope.file.asset.stateName = $scope.info.loadState.state; 
    } 

} 


function loadByIdAssetState(stateId) { 
    assetStateRESTService.getByIdAssetStates(stateId) 
    .then(function(state) { 
     console.log(state); 
     $scope.info.loadStateReady = true; 
     return state; 
    }) 
    .catch(function(error) { 
     console.log(error); 
    }); 

} 
} 

getSelected это сервис, который вернуть выбранным актив, актив имеет assetState_id, я хочу, чтобы имя было в этом состоянии

+0

вы можете предоставить полный код? –

+0

Я редактирую код, пока это только одно назначение – oriaj

ответ

0

Похоже, вы забыли ввести loadByIdAssetState в свой контроллер, вы должны сделать это, чтобы использовать его. Сделайте это:

function initCtrl(loadByIdAssetState) { 
    $scope.info.loadState = loadByIdAssetState($scope.file.asset.assetState_id).done(function(state) { 
     console.log(state); 
     $scope.file.asset.stateName = state.state; 
     return state; 
    }); 
    console.log($scope.info.loadState); 
    $scope.file.asset.stateName = $scope.info.loadState.state; 
} 
+0

спасибо за ваш ответ, но если 'loadByIdAssetState' определен в одном контроллере, почему я прошел для параметра? если я передаю функцию hw param получить следующую ошибку 'loadByIdAssetState не является функцией' – oriaj

+0

Вам нужно будет показать больше кода, потому что мы не можем видеть всю картину. – Chrillewoodz

+0

Я редактирую вопрос с полным контроллером, вопрос был плохо сформулирован, предлагая одно извинение – oriaj

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