我想了解如何在我的角度项目中建立一个好的组织。
[见下面的代码]
将getFireList函数放入Factory是否有意义?或者我应该把它放进控制器?
"班级"火有道理吗?我应该删除它吗?我应该把它移到控制器吗?我应该把它搬到工厂吗?
如果您在此代码中发现任何错误,我真的有兴趣了解更多信息。
目前,我已经得到了这个:
课程" Fire"创建Fire类型的新对象。
function Fire (p_power) {
// ATTRIBUTES
this.id = null;
this.power = p_power;
this.position = {
x: null,
y: null
}
// GETTERS/SETTERS
// id
this.getId = function() {
return this.id;
}
this.setId = function(p_id) {
this.id = p_id;
}
// power
this.getPower = function() {
return this.power;
}
this.setPower = function(p_power) {
this.power = p_power;
}
// position
this.getPosition = function() {
return this.position;
}
this.setPosition = function(p_position) {
this.position = p_position;
}
// METHODS
this.increasePower = function(p_plus) {
this.power += p_plus;
}
this.decreasePower = function(p_minus) {
this.power -= p_minus;
}
}
控制器
simuApp.controller('FireController', function($scope, FireFactory) {
// ...
});
还有工厂
simuApp.factory('FireFactory', function() {
return {
fire_list: [],
getFireList : function() {
return $http.get(site_url+'fire/fireList').
then(
function(success) {
var data = success.data;
var fires = [];
var fire_tmp;
for (i=0 ; i<data.length ; i++) {
fire_tmp = new Fire( data[i].power );
fire_tmp.setId( data[i].idFire );
fires.push( fire_tmp );
}
fire_list = fires;
return fire_list;
}, function(err) {
// ...
}
);
}
}
});
感谢您的帮助。
答案 0 :(得分:1)
首先,我们让术语正确。 .factory
是一种注册生成服务实例的函数的方法 - 因此是“工厂”。但它产生的是一个单例服务实例。
因此,您创建的服务将更恰当地命名为FireSvc
(而不是FireFactory
),而创建它的函数可以在其中包含“factory”(尽管如此)在下面的例子中,该函数名称并不是真正需要的 - 它可能只是一个匿名函数):
.factory("FireSvc", function FireSvcFactory(){
});
使用服务从控制器中抽象出任何域/业务逻辑是一种很好的做法。保持控制器很薄,仅负责定义ViewModel,并通过更改ViewModel或调用模型上的函数来响应事件。
所以,让FireSvc.getFireList()
有意义。
现在,无论列表是普通对象的集合,还是Fire
的实例都完全独立于Angular,完全取决于您。无论如何,在SO答案中讨论的话题太宽泛了。