2016-07-10 4 views
2

все. У меня странная проблема ... У меня несколько приложений в приложении, и все они работают, за исключением одного контроллера. Я отправил на завод, функция Я пытаюсь использовать вместе с контроллером, а также состояние и вид, который должен вызвать функцию:

app.factory('handleShipping', ['$http', function($http){ 
var handleShipping = {}; 
handleShipping.validate = function(address){ 
    return ($http.post('/shipping/validate',address).success(function(data){ 
     console.log(JSON.stringify(data)); 
    })); 
} 
    return handleShipping; 

}]); 

...

app.controller('ValidateCtrl',['$scope','$state', 'handleShipping','shipperName', 'auth',function($scope, $state, handleShipping, shipperName,auth){ 

    $scope.getShipper = function(shipName){ 
     shipperName.shipper = shipName; 
    }; 


    $scope.validateAddress = function(){ 
     handleShipping.validate($scope.user).error(function(error){ 
      $scope.error = error;console.log('Error!'); 
     }).then(function(){ 
      $state.go('label'); 
     }); 
    }; 
}]); 

...

.state('address', { 
       url: '/address', 
       templateUrl: '/address.html', 
       controller: 'ValidateCtrl' 
     }) 
.state('label', { 
       url: '/label', 
       templateUrl: '/label.html', 
       controller: 'LabelCtrl' 
     }); 

...

<script type="text/ng-template" id="/address.html"> 
    <div class="page-header"> 

    <h1>Address, please</h1> 

    </div> 

    <div ng-show="error" class="alert alert-danger row"> 
    <span>{{ error.message }}</span> 
    </div> 

    <form ng-submit="validateAddress()" 
    style="margin-top:30px;"> 


    <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Street" 
     ng-model="user.street"></input> 
    </div> 
    <div class="form-group"> 
     <input type="text" 
     class="form-control" 
     placeholder="City" 
     ng-model="user.city"></input> 
    </div> 
    <div class="form-group"> 
     <input type="text" class="form-control" placeholder="State" ng-model="user.state"></input> 
    </div> 
    <div class="form-group"> 
    <input type="text" 
     class="form-control" 
     placeholder="Zip Code" 
     ng-model="user.zipCode"> 
    </input> 
    </div> 
    <button type="submit" class="btn btn-primary">Submit</button> 
    </form> 
</script> 

У меня нет сообщения об ошибке. Если я набираю localhost: 3000/label, я вижу вид. Кроме того, я замечаю что-то странное ... если я останусь на «адресе» вида, и я нажимаю кнопку «отправить», ничего не происходит. Но если оставить в покое страницу, и приложение работает на терминале, он будет случайным образом появляется сообщение об ошибке в консоли, а на терминале, я буду видеть

POST /shipping/validate - - ms - - 

Любая помощь будет принята с благодарностью.

ответ

1

Фабричный метод должен возвращать обещание. В настоящее время вы используете success & error callbacks внутри службы, это не позволяет вам обещать цепочку над функцией проверки. Вы должны получить сообщение об ошибке в консоли. $state.go не работает, потому что выполнение не дошло до этой строки.

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

завод

handleShipping.validate = function(address){ 
    return $http.post('/shipping/validate',address); 
}; 

Контроллер

$scope.validateAddress = function(){ 
    handleShipping.validate($scope.user).then(function(data){ //success 
     //$state.go('label'); 
    }, function(error){ //error 
     $state.go('label'); 
    }) 
}; 
+0

Большое спасибо! – thrasymachus

+0

@thrasymachus Рад помочь вам, спасибо :-) –

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

  • Нет связанных вопросов^_^