如何从角度工厂返回一个布尔值

时间:2015-08-27 19:09:18

标签: javascript angularjs

我写了一个通用的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) {

2 个答案:

答案 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;
});