javascript - 返回 bool 值的 Angularjs 自定义服务方法

标签 javascript angularjs service

我的一个 Controller 在与 Angularjs 中的一项服务通信时出现问题:

  1. 用户输入代码;
  2. Controller 获取输入的代码并将其传递给我的自定义服务,以通过名为 IsCodeValid 的方法了解代码是否有效;
  3. 该服务方法调用 Web API 方法,如果代码有效,则返回 true,否则返回 false;
  4. 服务方法返回 Web API 调用的结果(如果有效则为 true;否则为 false);

这是我的 Controller (部分):

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。

然而,即使输入了有效的代码, Controller 也始终会得到错误的结果。

我错过了什么?

最佳答案

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

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

解决方案:

在您的服务方法中返回这样的 promise 对象

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

在您的 Controller 中等待 promise 得到解决以获得结果

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

您还可以使用 .success 函数代替 then 来注册回调方法。 您可以引用这个链接:https://docs.angularjs.org/api/ng/service/ $http

关于javascript - 返回 bool 值的 Angularjs 自定义服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25510163/

相关文章:

networking - kubernetes:主机外部无法访问服务

rest - Http请求(REST API)angular2时的错误处理机制

javascript - 单击时,重定向到新页面并滚动到该新页面上的特定 div

javascript - 使用 jQuery 创建格式不正确的查询字符串不起作用

javascript - 如何将换行符插入到创建的 Javascript 对象数组中

javascript - AngularJS 应用程序在 IE 中加载缓慢 - 添加进度条

javascript - 如何使用 angularjs 从 jquery 中的主体中删除类

resources - 如何在 AngularJS 中添加 $resource 方法的回调

javascript - 最好的 NodeJS 库/包装器的在线支付服务

javascript - 正则表达式:提取 "Key: Value"(无分隔符)