我最近阅读了Angular Style Guide,我仍然想知道实例化像这样的对象的好方法是什么:
Tracker = function(data){
key: data.key,
name: data.name,
buckets: data.buckets,
enable: data.enable || false,
geoip: data.geoip || false
}
我的目标是尊重脱钩的原则。我不想在我的控制器中有任何new Tracker()
。
基于Angular Style Guide我使用工厂将我的控制器与类跟踪器分离。这是我的工厂。
angular
.module('ranger')
.factory('factoryTracker', factoryTracker);
factoryTracker.$inject = ['$anyInjetable'];
function factoryTracker($anyInjetable) {
var factory = {
instantiate: instantiate
};
return factory;
///////////
function instantiate(data){
return {
//Properties
key: data.key,
name: data.name,
buckets: data.buckets,
enable: data.enable || false,
geoip: data.geoip || false
//Methods
helloWorld: helloWorld
};
}
function helloWorld(){
return "I come in peace";
}
}
在我的控制器中,我使用它:
factoryTracker.instantiate({
key: tracker._id,
name: tracker.name,
enable: false
});
我的问题是声明我的Tracker对象的方式:
没有真正声明,我们只看到实现
不易阅读
实现的方法在对象闭包之外......
最重要的是:如果我想将类切换为实例化,那么我不想在工厂中编写它。
关于使用工厂和放置模型的几个来源,我谈到了这个问题。但我现在的代码不行。
有任何建议吗?
答案 0 :(得分:0)
关于@Chandermani提供的链接,这是我的最终代码。清晰,网络,可读。
angular
.module('ranger')
.factory('factoryTracker', factoryTracker);
factoryTracker.$inject = ['$q'];
function factoryTracker($q) {
/**
* Constructor, with class name
*/
function Tracker(data) {
// Public properties, assigned to the instance ('this')
this.key = data.key;
this.name = data.name;
this.buckets = data.buckets;
this.enable = data.enable;
this.geoip = data.geoip;
}
/**
* Public method, assigned to prototype
*/
Tracker.prototype.helloWorld = function () {
return "I come in peace";
};
/**
* Static method, assigned to class
* Instance ('this') is not available in static context
*/
Tracker.build = function (data) {
return new Tracker(data);
};
return Tracker;
}