Задать вопрос
  • Как в директиве получить контроллер в который она обернута?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    или если его и не нужно получать по идеологии, то почему?

    потому что это создает зависимость директивы от контекста, в котором она используется. Проследите логику

    1) работа директивы требует того что бы она была обернута в SomeControeller на уровень выше.
    2) директива становится частью SomeControeller, или если быть точным, куска view которым управляет SomeControeller.
    3) нет смысла в директиве, так как мы не можем более реюзать ее в другом месте
    4) если директива зависит от контроллера SomeControeller, почему бы не вынести из SomeControeller то что нужно директиве в ее собственный контроллер?

    как-то так. Все взаимодействие с директивой должно происходить либо через контроллеры директив (параметр require директивы), либо через атрибуты (изолированный scope, bindToController в angular 1.4). И уж тем более странно желание подменять методы контроллера из link.

    updated

    короче суть в непонимании того что есть директива как я понимаю. Директива - самодостаточная единица (самостоятельное маленькое MVC приложение). По хорошему она может зависеть только от других директив, но ей глубоко должно быть плевать где именно и как ее используют. Она выполняет свой маленький кусочек логики. Некоторые директивы выступают в роли фасадов, инкапсулируя в себе и упрощая работу с множеством директив.

    Далее, по поводу обработчиков - яркий пример директива ng-click. Эта директива выглядит как-то так:

    function myNgClick() {
        return {
            restrict: 'A',
            scope: {
                callback: "&myNgClick"
            },
            link: function (scope, el) {
                el.bind('click', function (e) {
                    scope.$apply(function () {
                         scope.callback({$event: e});
                    });
                });
            }
        }
    }


    Как мы видим на этом примере, у нас есть директива, чья основная задача - вызвать что-то по клику на элемент. И все. Через эту директиву мы скажем можем дернуть метод контроллера другой директивы. В этом проявляется сила ангуляра, мы можем проводить декомпозицию элементов интерфейса настолько глубоко насколько мы вообще хотим. делать крайне изолированные, маленькие и простые директивы, которые очень легко покрыть тестами и легко использовать.

    link директивы нужен ТОЛЬКО для того что бы связать DOM и логику. То есть в 99% случаев в директиве будет только link или только контроллер. Оба - это уже стремно, в этом случае лучше вынести ту логику которую хочется запихнуть в link в отдельную директиву.

    контроллер (мы сейчас отойдем чуть чуть от MVC только ради того что бы упростить все) реализует всю логику (или делегирует модели). Вся логика не относящаяся к DOM а например относящаяся к обработке данных должна быть вынесена в контроллер.

    Пара слов по поводу ng-controller. Это так же директива, которая позволяет привязать к элементу какой-то контроллер. Эта штука по сути (как и ng-include в принципе) нужна только для ускорения разработки и упрощения. В целом же приложение на angular стоит воспринимать как HMVC приложение, состоящее исключительно из деревьев директив. Первый шаг на пути к web-components (по сути ангуляровские директивы послужили неплохим глотком вдохновения).

    Как-то так.
    Ответ написан
  • Не работает copy/paste из других приложений в PHPStorm

    kompi
    @kompi
    nullstack devoops

    Issue, видимо, этот. Аналогично поломался copy/paste на mint 15 (13.10). Сегодня обновил java 8, все заработало.

    java -version
    java version "1.8.0-ea"
    Java(TM) SE Runtime Environment (build 1.8.0-ea-b115)
    Java HotSpot(TM) 64-Bit Server VM (build 25.0-b57, mixed mode)

    Ответ написан
    1 комментарий