Один и тот же угловой контроллер для другого вида

У меня есть требование перечислить, отредактировать и удалить объект. У меня разные взгляды на каждую из этих операций. Я хочу знать, является ли хорошей практикой использование одного и того же контроллера 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;
    })
}());
Другие вопросы по тегам