Angularjs自定义服务方法,返回一个布尔值

时间:2014-08-26 15:56:26

标签: javascript angularjs service

我的一个控制器在与Angularjs中的某个服务交谈时遇到问题:

  1. 用户输入代码;
  2. 控制器通过名为IsCodeValid的方法获取输入的代码并将其传递给我的自定义服务,以了解代码是否有效;
  3. 该服务方法调用web api方法,如果代码有效则返回true,否则为false;
  4. service方法返回web api调用的结果(如果有效,则为true;否则为false);
  5. 这是我的控制器(部分):

    angular.module('clockin').controller('KeypadController', ['$scope', '$location', 'userService',
            function ($scope, $location, userService) {
    
                ...
    
                $scope.keypadEnter = function () {
                    var result = userService.isCodeValid($scope.code);
                    console.log(result);
                };
    
                ...
      }]);
    

    这是我的服务:

    angular.module('clockin').service('userService', ['$http',
        function ($http) {
            this.isCodeValid = function (code) {
                $http.get("/api/clockin/iscodevalid?code=" + code)
                    .then(function (result) {
                        return result;
                });
            }
        }
    ]);
    

    我的网络API方法完美无缺。如果我手动调用它并将有效代码指定为URL中的参数,则会按预期返回true。

    但是,即使输入了有效的代码,控制器也总是会出错。

    我错过了什么?

1 个答案:

答案 0 :(得分:1)

$ http.get cal是一个异步调用。所以你不会得到这样的预期结果。

$ http.get调用返回一个promise,当你解析时,调用你在then方法中指定的回调函数。

<强>解决方案:

在你的服务方法中,像这样返回promise对象

angular.module('clockin')
  .service('userService', ['$http', function ($http) {
    this.isCodeValid = function (code) {
      return $http.get("/api/clockin/iscodevalid?code=" + code);
    };
  }]);

在您的控制器中等待承诺得到解决以获得结果

$scope.populatekeypadEnter = function () {
  var result = userService.isCodeValid($scope.code)
    .then(function (result) {
      $scope.keypadEnter = result;
    });                
};

您也可以使用.success函数来代替注册回调方法。 您可以参考以下链接:https://docs.angularjs.org/api/ng/service/ $ http