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

Angularjs custom service method that returns a boolean value

本文关键字:Angularjs 自定义 服务 方法 布尔值 一个 返回      更新时间:2023-09-26

我的一个控制器与Angularjs中的一个服务通信出现问题:

  1. 用户输入代码;
  2. 控制器接受输入的代码并将其传递给我的自定义服务,通过一个名为IsCodeValid的方法来知道代码是否有效;
  3. 该服务方法调用一个web api方法,如果代码有效则返回true,否则返回false;
  4. 服务方法返回web api调用的结果(如果有效则为true;否则假);

这是我的控制器的一部分:

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;
            });
        }
    }
]);

我的web API方法工作完美。如果我手动调用它,并在URL中指定一个有效的代码作为参数,它会像预期的那样返回true。

但是,即使输入了有效的代码,控制器的结果也总是为false。

我错过了什么

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

http美元。Get call返回一个promise,当它被解析时,会调用一个你在then方法中指定的回调函数。

解决方案:

在你的服务方法中像这样返回承诺对象

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

在你的控制器中等待promise得到解析以获得结果

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

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