我写了一个通用的crud工厂,到目前为止证明是非常有用的,唯一的问题是,当我去使用服务并检查结果时,值没有保留布尔值true。我相信这是因为javascript返回基于每个函数,但我不确定如何正确地操作布尔值。有什么想法吗?
module.factory('crud', function ($http, API_CONFIG) {
return {
delete: function ($index, $scope, id, collection) {
$http({
url: API_CONFIG.url + collection + "/" + id,
method: 'DELETE',
headers: { "Content-Type": "application/json;charset=utf-8" }
}).success(function (result) {
console.log(result);
$scope.countries.splice($index, 1);
return true;
}).error(function () {
console.log("error");
});
},
update: function ($index, $scope, id, collection) {
console.log("update");
console.log(id);
console.log(collection);
},
create :function(model, collection) {
$http.post(
API_CONFIG.url + collection,
JSON.stringify(model),
{
headers: {
'Content-Type': 'application/json'
}
}
).success(function (data) {
console.log("model sent");
return true;
}).error(function () {
console.log("error");
});;
}
};
});
module.run(function ($rootScope, crud) {
$rootScope.appData = crud;
});
然后在控制器中这样使用:
var result = $scope.appData.create(country, "collection");
if (result === true) {
答案 0 :(得分:2)
您正在异步回调函数中使用return。因此,之后执行的代码也应该是异步的。尝试将附加功能传递给create
,该功能将在成功时执行。例如:
create: function(model, collection, callback) {
$http.post(...)
.success(function(data) { callback(data, true); })
.error(function(data) { callback(data, false); });
}
然后您可以使用它:
appData.create(model, collection, function(data, success) {
if(success === true) {
...
} else {
...
}
}
答案 1 :(得分:1)
您需要在工厂返回承诺return $http
并执行以下操作:
$scope.appData.create(country, "collection").then(function() {
// like a result = true;
}, function() {
// like a result = false;
});