我是角度的初学者,我试着理解我是否应该像这样使用工厂:
app.factory('FoobarServices', ['$http', function ($http) {
var Foobar = {
// Model
};
return {
getFoobar: function () {
},
setFoobar: function (Foobar) {
},
update: function (foobar) {
},
delete: function (id)
}
};
}]);
或类似的东西:
app.factory('Fooba', ['$http', function($http) {
function Foobar(foobar) {
// Initialize foobar
};
Foobar.prototype = {
getFoobars: function() {
},
setFoobar: function(foobar) {
},
update: function(foobar) {
},
delete: function(id) {
},
};
return Foobar;
}]);
我不确定每种模式的优缺点是什么,哪种更适合角度项目。
你能否告诉我应该使用哪一个?
答案 0 :(得分:2)
这取决于您希望如何使用您的服务。 Factory通常用于存储一些构造函数,稍后您可以从中实例化一些对象。
例如:
app.factory('Client', function () {
function Client (name) {
this.name = name;
}
Client.prototype.sayHello = function () {
console.log('Hello, my name is ' + this.name + '!');
}
return Client;
})
.controller('ClientController', function (Client) {
var bob = new Client('Bob');
})
如果您的服务是单身,则可以将其注册为service
而不是factory
,而angular会为您创建一个实例。
或者您可以将其注册为工厂,但使用方法返回一些对象。当您不想在服务逻辑中处理上下文(this
)时,它非常有用:
app.factory('ClientStorage', function () {
function set () {
// to be implemented
}
function get () {
// to be implemented
}
return {
get: get,
set: set
};
})