Angularjs 在工厂中实例化对象的正确方法是什么?
我最近阅读了,我仍然想知道实例化像这样的对象的好做法是什么:Angularjs 在工厂中实例化对象的正确方法是什么?,angularjs,oop,Angularjs,Oop,我最近阅读了,我仍然想知道实例化像这样的对象的好做法是什么: Tracker = function(data){ key: data.key, name: data.name, buckets: data.buckets, enable: data.enable || false, geoip: data.geoip || false } 我的目标是尊重脱钩原则。我的控制器中不需要任何新跟踪器() 基于,我使用工厂将我的控制器与类跟踪器解耦。这是我的工厂 angular
Tracker = function(data){
key: data.key,
name: data.name,
buckets: data.buckets,
enable: data.enable || false,
geoip: data.geoip || false
}
我的目标是尊重脱钩原则。我的控制器中不需要任何新跟踪器()
基于,我使用工厂将我的控制器与类跟踪器解耦。这是我的工厂
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
});
我的问题是我的跟踪器对象的声明方式:
- 没有真正声明,我们只看到实现
- 不容易阅读
- 实现的方法在对象闭包之外
- 最重要的是:如果我想将类切换为实例化,那么我就不想在工厂中编写它
我谈到了关于使用工厂和在哪里放置模型的几个来源。但是我现在还不能接受我的代码
有什么建议吗?关于@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;
}
你也可以在这篇文章中找到有用的资源,非常感谢。