góc chỉ cung cấp cho một singleton lựa chọn dịch vụ / nhà máy. một cách giải quyết là có một dịch vụ nhà máy sẽ xây dựng một phiên bản mới cho bạn bên trong bộ điều khiển của bạn hoặc các phiên bản tiêu dùng khác. thứ duy nhất được đưa vào là lớp tạo ra các thể hiện mới. đây là một nơi tốt để đưa các phụ thuộc khác vào hoặc khởi tạo đối tượng mới của bạn vào đặc tả của người dùng (thêm dịch vụ hoặc cấu hình)
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 {
// any injection of services can happen here on the factory constructor...
// I didnt implement a constructor but you can have it contain a $log for example and save the injection from the build funtion.
build($log: ng.ILogService, connection: string, collection: string, service: admin.services.ICollectionService): IModel {
return new Model($log, connection, collection, service);
}
}
export interface IModel {
// query(connection: string, collection: string): ng.IPromise<any>;
}
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);
}
thì trong trường hợp người tiêu dùng của bạn, bạn cần dịch vụ nhà máy và gọi phương thức xây dựng trên nhà máy để nhận bản sao mới khi bạn cầ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);
}
}
bạn có thể thấy nó cung cấp cơ hội để đưa một số dịch vụ cụ thể không có sẵn trong bước xuất xưởng. bạn luôn có thể có quá trình tiêm xảy ra trên phiên bản gốc để tất cả các phiên bản Model sử dụng.
Lưu ý rằng tôi đã phải loại bỏ một số mã vì vậy tôi có thể mắc một số lỗi ngữ cảnh ... nếu bạn cần một mẫu mã hoạt động, hãy cho tôi biết.
Tôi tin rằng NG2 sẽ có tùy chọn để đưa một phiên bản mới của dịch vụ của bạn vào đúng vị trí trong DOM của bạn, do đó bạn không cần phải xây dựng triển khai nhà máy của riêng mình. sẽ phải chờ xem :)