我已经用angular编写了服务。在浏览器控制台中,数据即将到来,但作为回报,我没有得到[object Object];
/// <reference path="angular.min.js" />
var app = angular.module("myapp", []);
app.service("myservice", function ($http) {
this.myfun = function () {
var x;
$http.get("http://localhost:41173/api/AngularTest/login_valid").success(function (response) {
console.log("all get data",response);
x = response.data
}).error(function (err) {
console.log("all error ", err);
});
debugger;
return x;
}
});
app.controller("myctrl", function ($scope, $http, myservice) {
$scope.transform = function (input) {
$http.get("http://localhost:41173/api/AngularTest/login_valid").then(function (response) {
if (response.data == true) {
$scope.out = myservice.myfun();
}
else {
$scope.out = "Fail";
}
});
}
});
答案 0 :(得分:0)
您需要使用Promises。它们是异步回调,您不能从中返回值,只能返回一个Promise,即可解决。同时使用.then()
代替.success()
。可能是这样的:
var app = angular.module("myapp", []);
app.service("myservice", function($http) {
this.myfun = function() {
return $http.get("http://localhost:41173/api/AngularTest/login_valid");
}
});
app.controller("myctrl", function($scope, $http, myservice) {
$scope.transform = function(input) {
$http.get("http://localhost:41173/api/AngularTest/login_valid").then(function(response) {
if (response.data == true) {
myservice.myfun().
then(function(res) {
$scope.out = res.data;
}, function(err) {
console.log("Error:", err)
})
} else {
$scope.out = "Fail";
}
});
}
});
答案 1 :(得分:-1)
这不是异步服务的工作方式。您必须返回承诺并在控制器中管理数据。
this.myfun = function() {
return $http.get(API).
then(function(response) {
return response.data;
}, function(error) {
return error;
});
};
然后在控制器中
app.controller("myctrl", function ($scope, $http, myservice) {
$scope.transform = function (input) {
$http.get("OTHER API").then(function (response) {
if (response.data == true) {
myservice.myfun().then(function (data) {
$scope.out = data;
},
function(error) {
$scope.out = error;
});
}
else {
$scope.out = "Fail";
}
});
}
});
确保response.data确实返回布尔值。
看着您的控制器,您似乎想链接http调用。
将每个http请求放入服务中并使用async等待将它们链接起来看起来会更好。
提供正确的polyfill:
async transform = function(input) {
var firstData = await myservice.firstCall();
firstData && await myservice.myfun();
}
还尝试使用controllerAs清理$ scope的过度使用