Следуя шаблону MVC, один контроллер должен иметь возможность обрабатывать несколько представлений в AngularJS.
Например. У меня есть одно представление для отображения всех пользователей и одно для создания нового пользователя. Мой $routeProvider
(отрывок) выглядит так:
app.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/showusers', {
templateUrl: 'partials/showusers.html',
controller: 'userController'
}).
when('/createuser', {
templateUrl: 'partials/showusers.html',
controller: 'userController'
})
}]);
Оба представления используют несколько общих методов, таких как получение всех атрибутов пользователя. Доступ к этим общим методам осуществляется через файл factory
.
userController
(отрывок) в настоящее время выглядит так, где Users
— это фабрика:
angular.module('supportModule').
controller('userController', function($scope, Users) {
var init = function(){
$scope.users = Users.getAll();
$scope.attributes = Users.getAttributes();
}
init();
})
Проблема в том, что мне не нужно запрашивать Users.getAll();
, когда я нахожусь в представлении createuser
.
Конечно, я мог бы легко разобрать маршрут, используя $location
, $routeProvider
или чистый JS, а затем условно вызвать методы, но я полагаю, что в Angular есть более элегантный и эффективный способ :)
Что-то вроде типичных фреймворков MVC, где один контроллер имеет много действий - по одному для каждого представления.
Итак, мой вопрос:
Как элегантно вызывать методы на основе представления в контроллере, который управляет более чем одним представлением?
resolve
. - person okm   schedule 31.07.2014