我的一个控制器在与Angularjs中的某个服务交谈时遇到问题:
这是我的控制器(部分):
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。
但是,即使输入了有效的代码,控制器也总是会出错。
我错过了什么?
答案 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