Расширение контроллеров в Angular
Краткое содержание
В статье рассказывается о том, как в 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));
Установка Debian на RAID-контроллер (обновлено 6 марта 2015)
Введение
В статье рассказывается об установке Debian на Fake-RAID - это RAID, эмулируемый некоторыми материнскими платами. При этом аппаратного RAID-контроллера, позволяющего прозрачно работать с массивом, на таких материнских платах нет. Проблем с установкой Debian на нормальный RAID обычно не бывает, а вот с Fake-RAID - ещё какие. Здесь рассказывается о том, как две такие проблемы решить.
Во многом эта статья является цитированием моего же перевода со странички в Wiki Debian, но есть несколько существенных отличий, о которых там не сказано.
Примечания для UEFI-систем.
Debian 7 Wheezy давно поддерживает установку на UEFI-системы, поэтому не надо переводить компьютер в Legacy-режим, продолжайте установку как обычно. В редких случаях в UEFI нужно зайти на вкладку Security и в поле OS type вместо Windows выбрать Other system.
Небольшие различия есть в работе установщика Debian - в случае с обычной системой для правки параметров запуска следует нажать Tab. Для UEFI-систем нужно нажать e. Запуск установщика в этом случае так же производится по-разному: Enter для обычных систем и F10 для UEFI.
Так же для UEFI-систем я НАСТОЯТЕЛЬНО рекомендую преобразовать таблицу разделов из устаревшего уже формата MBR в современный GPT. Однако, должен сразу предупредить: десктопные версии Windows могут работать с GPT только начиная с версии 8, т.е. установить Windows 7 на диск с GPT-таблицей разделов уже не получится.
Начало установки
-
Создайте RAID-массив. Для этого обычно есть специальные утилиты, поставляемые производителем материнской платы.
-
Загрузитесь с носителя. Выбрав пункт
Install, нажмите нужную клавишу для редактирования параметров загрузки. -
Для BIOS-систем просто допишите в конце строки параметров:
dmraid=trueВ UEFI-системах следует использовать клавиши со стрелочками для перехода к 4-ой строке, которая на 64-битных системах обычно выглядит так:
linux /install.amd/vmlinuz video=vesa:ywrap,mtrr vga=788 \ -- quietВ конце этой строки следует дописать параметр
dmraid=true, в итоге получится такая строка:linux /install.amd/vmlinuz video=vesa:ywrap,mtrr vga=788 \ -- quiet dmraid=true -
Запустите установщик нажатием
Enterв BIOS-системах илиF10в UEFI-системах. -
Установка будет идти как обычно. В редакторе разделов для UEFI-систем не забудьте Создать в самом начале диска раздел размером 100 МБ, используемый как
Загрузочный раздел UEFI. Там будет создана соответствующая запись, позволяющая запускать загрузчик Debian. -
На этапе установки загрузчика произойдёт ошибка. ТАК И ДОЛЖНО БЫТЬ - ЗАГРУЗЧИК БУДЕТ УСТАНОВЛЕН ЧУТЬ ПОЗЖЕ. Следует выбрать в меню
Продолжение установки без загрузчика. -
Устанока будет завершена, будет предложено извлечь установочный носитель и перезагрузиться - перезагрузитесь, снова выбрав загрузку с установочного носителя!
Установка загрузчика
Для корректной установки загрузчика придётся проделать довольно хитрые манипуляции в режиме восстановления, который нужно запустить с установочного носителя.
-
В меню выберите пункт
Advanced optionsи нажмитеEnter, выберите пунктRescue modeи сконфигурируйте параметры загрузки ядра так, как это было описано выше, после чего запустите режим восстановления. -
Проделайте те же шаги, что и на этапе установки. На одном из этапов будет предложено выбрать корневой раздел для загрузки. Следует выбрать самую первую запись -
/dev/dm-1 -
Будет запущена оболочка BusyBox, в которой по-умолчанию используется интерпретатор sh. Для большего удобства я рекомендую запустить bash соответствующей командой.
-
Откройте файл
/etc/fstabс помощью редактора nano:nano /etc/fstab -
Обратите внимание на имена разделов. Сейчас они будут выглядеть примерно так:
/dev/mapper/pdc_ehdiebafp1 / ext4 errors=remount-ro 0 1 /dev/mapper/pdc_ehdiebafp9 /home ext4 defaults 0 2 /dev/mapper/pdc_ehdiebafp8 /tmp ext4 defaults 0 2 /dev/mapper/pdc_ehdiebafp5 /usr ext4 defaults 0 2 /dev/mapper/pdc_ehdiebafp6 /var ext4 defaults 0 2 /dev/mapper/pdc_ehdiebafp7 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 -
Всё, что нужно сделать сейчас - удалить лишнюю букву p перед цифрой в конце имени раздела, т.е. привести все строки к такому виду:
/dev/mapper/pdc_ehdiebaf1 / ext4 errors=remount-ro 0 1 /dev/mapper/pdc_ehdiebaf9 /home ext4 defaults 0 2 /dev/mapper/pdc_ehdiebaf8 /tmp ext4 defaults 0 2 /dev/mapper/pdc_ehdiebaf5 /usr ext4 defaults 0 2 /dev/mapper/pdc_ehdiebaf6 /var ext4 defaults 0 2 /dev/mapper/pdc_ehdiebaf7 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0После внесения изменений следует сохранить их с помощью
Crrl+Oи выйти из редактора с помощьюCtrl+X. -
Следует перемонтировать все имеющиеся разделы:
mount -o remount / mount /dev/mapper/pdc_ehdiebaf9 /home mount /dev/mapper/pdc_ehdiebaf8 /tmp mount /dev/mapper/pdc_ehdiebaf5 /usr mount /dev/mapper/pdc_ehdiebaf6 /varКоличество разделов зависит от того, как был размечен диск на этапе установки. Если вдруг забудете, какой раздел куда смонтирован, легко подсмотреть содержимое fstab с помощью команды
cat:cat /etc/fstab -
Теперь следует в файле
/etc/default/grubснять комментарий с параметраGRUB_DISABLE_LINUX_UUID=true.После того, как изменения будут сделаны и сохранены, выполните следующие команды для установки загрузчика:
update-grub grub-install /deb/mapper/pdc_ehdiebafЗдесь вместо
pdc_ehdiebafследует указать такое имя, раздела, которое указано в вашем/etc/fstabдля раздела/. Главная отличительная особенность - отсутствие цифр в конце имени. -
После того, как загрузчик будет установлен, следует завершить работу в оболочке с помощью команды
exit. Если запускали bash, вводитьexitпридётся дважды. -
Перезагрузите ситему, выбрав соответствующий пункт в меню режима восстановления. Теперь установленная система сможет загрузиться.
Дополнительно
Разработчики Debian знают об этом баге с 2013 года, материалы для статьи были взяты из переписки одного из пользователей с ними. Тикет описан здесь, описанное там решение было опробовано в реальной работе.