我试图添加一个注册函数,使用一个控制器和一个工厂,到我的角度应用程序,但我还没有得到几个字符串(有条件地绑定到成功或失败)返回我的工厂我的控制器。
下面的return语句最初只返回空字符串(我认为这与异步http有关,但不确定)。在任何情况下,我将如何返回我想要的两个字符串(_alertType和_alertMessage),其中的更新值来自.success或.error?
注册.html

<div class="col-md-6 container-fluid">

  <div class="jumbotron text-center" ng-controller="SignupController as vm">

    <p class="lead">
      <h2>Account Creation</h2>
      Welcome! Please make an account
    </p>

    <form ng-submit="vm.signup()">
      <p><input type="text" name="username" value="" placeholder="Username or Email" ng-model="username"></p>
      <p><input type="password" name="password" value="" placeholder="Password" ng-model="password"></p>
      <p class="submit"><input type="submit" name="commit" value="Sign Up"></p>
      <alert ng-show="vm.alertMessage" type="{{ vm.alertType }}">{{ vm.alertMessage }}</alert>
    </form>

  </div>

</div>

注册.factory.js
(function() {

  angular
    .module('app')
    .factory('signupFactory', signupFactory);

  signupFactory.$inject = ['$http'];

  function signupFactory($http) {
    var _alertType = '';
    var _alertMessage = '';
    var service = {
      signup: signup,
      getAlertType: getAlertType,
      getAlertMessage: getAlertMessage
    };
    return service;

    function signup(username, password) {

      var request = $http({
        method: 'POST',
        url: 'http://localhost:8080/user',
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        data: {
          username: username,
          password: password
        }
      });
      request.success(function(){
        _alertType = "success";
        _alertMessage = "Signed Up";
      });
      request.error(function(){
        _alertType = "danger";
        _alertMessage = "Signup Failed";
      });
    }

    function getAlertType() {
      return _alertType;
    }

    function getAlertMessage() {
      return _alertMessage;
    }

  }

})();

注册.controller.js
(function() {
  'use strict';

  angular
    .module('app')
    .controller('SignupController', SignupController);

  SignupController.$inject = ['$scope', 'signupFactory'];

  function SignupController($scope, signupFactory) {
    var vm = this;
    vm.signup = function() {
      signupFactory.signup($scope.username, $scope.password);
      vm.alertMessage = signupFactory.getAlertMessage();
      vm.alertType = signupFactory.getAlertType();
    }

  }
})();

最佳答案

你应该寻找promises

var promise = asyncGreet('Robin Hood');
promise.then(function(greeting) {
  alert('Success: ' + greeting);
}, function(reason) {
  alert('Failed: ' + reason);
});

关于javascript - 如何从异步POST请求返回字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31461176/

10-12 00:20
查看更多