在角度js中创建服务或工厂(或其他)的建议

时间:2014-08-24 17:13:13

标签: javascript angularjs angular-services

我有一项接受四种不同http请求的服务。 但返回相同的数据模型(不同的数据,但相同的模型结构)。 我需要在某处保存服务和某些特定数据的结果。 我需要一个建议如何在我的javascript角度代码中实现它。

我实现这种方式: (创建一个工厂,返回保存结果和特定数据的新类实例)。

app.factory('myFactory', function () {
    var myDataModel = function (name) {
        var self = this;
        self.name = name;
        self.results = [];
        self.isSearching = false;

        self.get = function (id) {
            self.isSearching = true;

            $http.get('url' + '?name=' + self.name + '&id=' + id)
                .then(function (data) {
                    self.results = data;
                    self.isSearching = false;
                });
        };

        self.display = function () {
            alert('the result of ' + self.id + ' is:' + self.results.join(', '));
        };
    };
    return {
        myDataModel: function () {
            return new myDataModel();
        }
    };
});

我不认为这种方式是正确的'办法。 我想听听有关如何实现这一点的建议(也许是服务,也许是指令)?

非常感谢。

幼狮。

1 个答案:

答案 0 :(得分:0)

我认为您创建服务的方式更适合服务而不是工厂,即使这样也可以。

我会像下面那样写我的工厂而不使用新的:

app.factory('myFactory', function () {
var myDataModel = {};

myDataModel.name = name;
myDataModel.results = [];
myDataModel.isSearching = false;

myDataModel.get = function (id) {
myDataModel.isSearching = true;

$http.get('url' + '?name=' + myDataModel.name + '&id=' + id)
    .then(function (data) {
         myDataModel.results = data;
         myDataModel.isSearching = false;
    });
};

myDataModel.display = function () {
    alert('the result of ' + myDataModel.id + ' is:' + myDataModel.results.join(', '));
};
return myDataModel;
});