açısal, yalnızca tek bir servis / fabrika seçeneği verir. Bunun bir yolu, denetleyicinizin veya diğer tüketici örneklerinin içinde sizin için yeni bir örnek oluşturacak bir fabrika hizmetine sahip olmaktır. enjekte edilen tek şey, yeni örnekler yaratan sınıftır. burası, diğer bağımlılıkları enjekte etmek veya yeni nesnenizi kullanıcının özelliklerine göre başlatmak için iyi bir yerdir (servis veya yapılandırma ekleme)
namespace admin.factories {
'use strict';
export interface IModelFactory {
build($log: ng.ILogService, connection: string, collection: string, service: admin.services.ICollectionService): IModel;
}
class ModelFactory implements IModelFactory {
build($log: ng.ILogService, connection: string, collection: string, service: admin.services.ICollectionService): IModel {
return new Model($log, connection, collection, service);
}
}
export interface IModel {
}
class Model implements IModel {
constructor(
private $log: ng.ILogService,
private connection: string,
private collection: string,
service: admin.services.ICollectionService) {
};
}
angular.module('admin')
.service('admin.services.ModelFactory', ModelFactory);
}
daha sonra tüketici örneğinizde fabrika servisine ihtiyacınız var ve ihtiyacınız olduğunda yeni bir örnek almak için fabrikada oluşturma yöntemini çağırın
class CollectionController {
public model: admin.factories.IModel;
static $inject = ['$log', '$routeParams', 'admin.services.Collection', 'admin.services.ModelFactory'];
constructor(
private $log: ng.ILogService,
$routeParams: ICollectionParams,
private service: admin.services.ICollectionService,
factory: admin.factories.IModelFactory) {
this.connection = $routeParams.connection;
this.collection = $routeParams.collection;
this.model = factory.build(this.$log, this.connection, this.collection, this.service);
}
}
Fabrika adımında bulunmayan bazı özel hizmetleri enjekte etmek için fırsat sağladığını görebilirsiniz. tüm Model örnekleri tarafından kullanılmak üzere fabrika örneğinde her zaman enjeksiyon gerçekleştirebilirsiniz.
Not Bazı kodlardan kurtulmak zorunda kaldım, böylece bazı bağlam hataları yapabilirim ... Eğer işe yarayan bir kod örneğine ihtiyacınız varsa bana bildirin.
NG2'nin, DOM'nuzda doğru yere hizmetinizin yeni bir örneğini enjekte etme seçeneğine sahip olacağına inanıyorum, bu nedenle kendi fabrika uygulamanızı oluşturmanıza gerek kalmayacak. beklemek ve görmek zorunda kalacak :)