Один и тот же угловой контроллер для другого вида
У меня есть требование перечислить, отредактировать и удалить объект. У меня разные взгляды на каждую из этих операций. Я хочу знать, является ли хорошей практикой использование одного и того же контроллера Angular just для этих операций, который работает с каждой операцией, или должен быть отдельный контроллер для каждой операции?
Также, если для этих операций используется один и тот же контроллер, возможно ли вызывать разные функции при загрузке разных представлений? Поэтому, когда пользователь переходит к представлению списка, при загрузке страницы вызывается метод списка, а когда он переходит к представлению редактирования, вызывается метод редактирования контроллера при загрузке представления редактирования. Мне удается добиться этого, вызывая методы, использующие ngInit, но, очевидно, это не рекомендуется в v1.2 и должно использоваться только с ngRepeat.
Мой вопрос похож на этот. Angular - использование одного контроллера для множества согласованных представлений по нескольким HTTP-запросам
Однако я также хочу знать, есть ли способ вызывать разные методы инициализации одного и того же контроллера в зависимости от представления, которым используется контроллер.
2 ответа
Я получил ответ здесь: использование одного и того же контроллера для всех операций CRUD (Rails-alike)
Очевидно, что для каждого представления рекомендуется использовать разные контроллеры, и они не должны работать как сервис. Это совсем другое для кого-то переходящего из MVC/WebAPI в angular.
Лучшим подходом может быть написание сервисной службы, которую можно использовать на контроллере. Используйте этот сервис на разных контроллерах.
Ваш сервис будет выглядеть примерно так:
(function() {
'use strict';
// this function is strict...
angular
.module('myapp.services', [])
.service('Utility', function() {
var Utility = {};
Utility.edit = function(id, dataset) {
//perform edit related task here
};
Utility.delete = function(id, dataset) {
//perform edit related task here
};
return Utility;
})
}());