返回一个布尔值的Angularjs自定义服务方法
Angularjs custom service method that returns a boolean value
我的一个控制器与Angularjs中的一个服务通信出现问题:
- 用户输入代码;
- 控制器接受输入的代码并将其传递给我的自定义服务,通过一个名为IsCodeValid的方法来知道代码是否有效;
- 该服务方法调用一个web api方法,如果代码有效则返回true,否则返回false;
- 服务方法返回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
相关文章:
- AngularJS自定义日期选择器指令
- AngularJS自定义过滤器未触发点击事件
- 用于分页的 AngularJS 自定义过滤器
- AngularJS:自定义 404 拦截器句柄 - 带有 URL 的响应
- 指令中的 AngularJS 自定义过滤器以格式化值
- AngularJS自定义指令ng显示/ng隐藏
- AngularJS自定义过滤器调用了两次,并在第二次调用时删除输入数据
- 带有隐藏函数的AngularJS自定义指令
- angularjs:自定义直接中的绑定数据在使用“”后不再更新;track-by-;在ng重复中
- 刷新/重新加载angularjs自定义指令
- angularjs自定义模块与$http注入
- 如何使用angularJS自定义服务从REST API获取数据
- AngularJS自定义指令在继承父作用域时访问模板中的属性
- Angularjs自定义服务变量未被$http成功定义
- 来自同一变量的 AngularJS 自定义订单
- AngularJS自定义指令和ctrl,如果出现以下情况,则抛出错误:ctrl的方法与ctrl的名称相同
- Angularjs 自定义指令 scope:true 更改它的父范围
- AngularJS自定义过滤器被调用两次
- AngularJS 自定义指令 - 将属性设置为等于范围对象值
- Angularjs 自定义指令双向绑定不起作用