Angular - użycie jednego kontrolera do wielu spójnych widoków w wielu żądaniach HTTP

Mam prosty scenariusz Angular JS. Pokazuję listę ekspertów w jednym widoku, a ta lista zawiera działania mające na celu edycję eksperta, co byłoby zrobione w innym widoku. Te widoki pochodzą z serwera i nie znajdują się w jednym pliku. Nie ładują się razem.

<!-- experts.html -->
<div ng-controller='expertController'>
    <!-- showing the list of experts here -->
</div>

W innym pliku na serwerze mam:

<!-- expert.html -->
<div ng-controller='expertController'>
    <!-- a form to edit/add an expert -->
</div>

A mój kontroler to:

app.controller('expertController', function ($scope) {
    $scope.getExperts = function () {
        _.get('/expert/getexperts/', null, function (data) {
            $scope.$apply(function () {
                $scope.experts = data;
            });
        });
    };

    $scope.editExpert = function (index) {
        _.get('/expert/getexpert/', { id: $scope.experts[index].Id }, function (data) {
                $scope.$apply(function () {
                    $scope.expert = data;
                });
         });
    };
});

Jednak żadne dane nie byłyby wyświetlane w formularzu edycji. Sprawdziłem zakresy za pomocą Batarang, aleexpert obiekt nie zostanie pokazany.

Problemem wydaje się to, że używam jednego kontrolera dla dwóch (i opcjonalnie więcej niż dwóch) widoków. Ponieważ jednak przeczytałem kilka innych pytań dotyczących SO, wydaje się, że najlepszą praktyką jest posiadanie jednego kontrolera na widok HTML.

Myślę jednak, że jest bardziej spójny i spójnyexpertController wykonać wszystkie operacje CRUD, wraz z innymi działaniami związanymi zexpert. Myślę, że to trochę brzydkieexpertEditController do edycji iexpertListController dla listy HTML.

Jaka jest tutaj najlepsza praktyka? Jak mogę mieć spójnego i semantycznie nazwanego kontrolera, a jednocześnie obsługiwać wiele widoków. W każdym frameworku MVC, który widziałem do tej pory, jest czymś rutynowym wspieranie wielu widoków za pomocą jednego kontrolera.

questionAnswers(3)

yourAnswerToTheQuestion