Так что я не получил ответа от my last question, поэтому решил сам справиться с этим.Контроллер общего набора AngularJS
Я создал универсальный контроллер, как это:
.controller('GenericListController', function() {
// Define this
var self = this;
// Define our list
self.list = [];
// Create our page sizes array
self.pageSizes = [10, 20, 50, 100];
// For filtering and sorting the table
self.pageSize = self.pageSizes[0];
self.predicate = 'name';
self.reverse = false;
self.filter = '';
// For deleting
self.delete = function (e, model) {
// Delete the item
service.delete(model.id);
};
});
очень просто, как вы можете видеть. Теперь я использую это, вводя его в мой контроллер, как это:
.controller('DashboardController', ['GenericListController', 'CenterService', 'companyId', 'centers', function (Controller, service, companyId, centers) {
// Assign this to a variable
var self = Controller;
}])
В теории все, что присвоенной GenericListController теперь доступен для DashboardController. Проблема заключается в линии в общем контроллере, который выглядит следующим образом:
service.delete(model.id);
Как-то мне нужно ссылаться моей службой в родовом контроллере. Я думал, что, возможно, я мог бы создать поставщика и вставить ссылку на службу в конструктор, но я не уверен, что это синглтон, это проблема, поэтому мне нужна помощь.
- Является ли сервис/завод/поставщик хороший способ построить GenericListController?
- Является ли сервис/фабрика единичным воздействием на что-либо? Если да, то могут ли они быть созданы, чтобы они не были одиночными?
- Есть ли другой способ достичь того, что я хочу?
Update 1
Так появляется некоторые люди путают ....
Так что, если я создал фабрику, которая выглядит следующим образом:
.factory('ListControllerService', function() {
// Default constructor expecting a service
return function (service) {
// Define this
var self = this;
// Define our list
self.list = [];
// Create our page sizes array
self.pageSizes = [10, 20, 50, 100];
// For filtering and sorting the table
self.pageSize = self.pageSizes[0];
self.predicate = 'name';
self.reverse = false;
self.filter = '';
// For deleting
self.delete = function (e, model) {
// Delete the item
service.delete(model.id);
};
};
})
затем создать 2 отдельных контроллера, которые выглядят следующим образом:
.controller('DashboardController', ['ControllerService', 'CenterService', 'companyId', 'centers', function (Controller, service, companyId, centers) {
// Assign this to a variable
var self = new Controller(service);
self.list = centers;
}])
.controller('CompanyController', ['ControllerService', 'CompanyService', 'ArrayService', 'companies', function (Controller, service, arrayService, centers) {
// Assign this to a variable
var self = new Controller(service);
self.list = companies;
}])
Надеюсь, вы увидите, что сервис, который я впрыскиваю в ListControllerService, отличается для каждого контроллера. Единственное предостережение, которое у меня есть с моим примером, заключается в том, что каждая «служба» должна иметь метод удаления (не так сложно, потому что все они являются службами api).
Надеюсь, это объяснит все лучше.
Что вы хотите, это сервис/завод, а не контроллер. Почему вы не хотите синглтон? Как одноэлемент, это один и тот же экземпляр во всем приложении – charlietfl
На самом деле, я думал после этого, что, возможно, я хочу, чтобы поставщик, а не служба или фабрика, потому что он не является контроллером провайдера? Я не уверен, хочу ли я синглтон или нет. Мне просто нужно иметь возможность вводить мои «сервисы» в общий контроллер. – r3plica
зависит от ваших потребностей ... используйте провайдера, если его необходимо настроить – charlietfl