Расширение контроллеров в Angular
dunmaksim
11:24
контроллер
,
наследование
,
angular
,
Controller
,
extend
,
inherit
Комментариев нет
Краткое содержание
В статье рассказывается о том, как в Angular можно реализовать наследование контроллеров.
Суть проблемы
Мне приходится писать довольно много кода на Angular, при этом заметил, что от контроллера к контроллеру меняются, порой, лишь незначительные части. Например, везде, где я использую ngInfiniteScroll, в $scope
приходится помещать переменные allLoaded
и loading
, а так же обработчик loadMore()
, выполняющий загрузку новых элементов. По незнанаю, приходилось многократно дублировать практически одинаковый код. Однако, один из пользователей StackOverflow нашёл очень хорошее решение данной проблемы.
Решение
Решение оказалось на удивление простым и заключается в использовании сервиса $controller
.
(function (A){
"use strict";
// Базовый контроллер, который содержит код, общий для всех других контроллеров,
// которые будут наследоваться от него
A.module('App').controller('ListController', ['$scope', function($scope){
$scope.allLoaded = false;
$scope.items = [];
$scope.loading = false;
$scope.loadMore = function(){
if ($scope.loading){
return;
}
// Тут какая-то работа по загрузке данных
};
$scope.refresh = function(noPlease){
if (noPlease){
return;
}
$scope.items.length = 0; // Более правильное решение, нежели $scope.items = [];
// т.к. в этом случае сохраняется ссылка на оригинальный
// объект
};
}]);
}(this.angular));
ChildClass.js
(function(A){
"use strict";
A.module('App').controller('UserListController', [ '$controller', '$scope', function($controller, $scope){
// Расширяем контроллер
$controller('ListController', {
$scope: $scope
});
// Теперь можно собственные свойства описывать
}]);
}(this.angular));
Подписаться на:
Комментарии к сообщению
(
Atom
)
Комментариев нет :
Отправить комментарий