ФорумПрограммированиеJavaScriptAngularJS → Angular Light усовершенствованный al-init, условие для al-click

Angular Light усовершенствованный al-init, условие для al-click

  • Oleg

    Сообщения: 11 Репутация: N Группа: Адекваты

    Spritz Дек. 25, 2015, 5:18 п.п., спустя 49 дней 17 часов 16 минут

    Всем привет.
    Случайно заметил топик, оповещения на почту мне не приходят с этого форума, почему-то.

    В al-init и al-click можно писать (почти) произвольный код, присылайте если что-то не работает.

    al-init просто выполняет указанный код, обычно используется для установки начальных значений или вызова метода (реже), al-init="activeMenu=5; size=10;", удобно когда лень делать контроллер/директиву ради одной строчки.

    al-click="menu==='main'?click():undefined"
    

    Я обычно проверку засовываю внутрь метода, так же ещё al-disable/al-enable должны работать.

    А вот что нужно, это иметь коллбэки, когда директива инициализируется, типа al-directive-init и al-directive-link. Опять же можно свой атрибут придумать и передать имя функции, но как-то это костыльно, нет более изящного пути?

    Т.е. отлавливать когда директива закончила инициализацию? Какой юзкейс?
    Можно использовать scope.$watch('$finishBinding', callback) - вызовет callback когда директивы (включая дочерние) отработают и построят DOM.

  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Дек. 25, 2015, 8:31 п.п., спустя 3 часа 12 минут 58 секунд

    Т.е. отлавливать когда директива закончила инициализацию? Какой юзкейс?
    Можно использовать scope.$watch('$finishBinding', callback) - вызовет callback когда директивы (включая дочерние) отработают и построят DOM.

    @Oleg, я пишу директиву - некий виджет, дальше верстальщик начинает его использовать по сайту и у него возникают разные потребности. Переместить в его в ДОМе, навесить еще какие-то события, менять цвет, отслеживать положение виджета при скроле и изменении размера окна итд итп
    Весь этот треш, я не хочу срать в код директивы, тк он по сути к ней не относиться и без конца меняется, а хочу отдать на откуп верстаку для каждого конкретного случая и вот тут ему нужно поймать момент, когда Дом построен. Клево, если бы это был штатный аттрибут ...

  • Oleg

    Сообщения: 11 Репутация: N Группа: Адекваты

    Spritz Дек. 26, 2015, 12:20 д.п., спустя 3 часа 48 минут 51 секунду

    Все равно не до конца понятно.

    Нужно поймать момент когда конкретная директива "построится"? (т.е. половина приложения будет построена, а вторая половина ещё нет), или когда приложение целиком построится? или это виджет и есть приложение?

    для первого варианта можно добавить обработчик в alight.hooks.directive,
    для второго - можно вручную вызывать alight.bootstrap, и после выполнять необходимый код.

    так же можно сделать директиву al-call="function(123)" - разложить её в нужные места приложения, и она в эти моменты будет вызывать (глобальную) функцию и там уже делать то что нужно. Например если есть какой-то отложенный шаблон на сервере, можно в конец шаблона добавить коммент <!-- directive: al-call templateLoaded(123) -->, в итоге это будет как callback на загруженный шаблон.

    А через alight.hooks.directive можно сделать например так: верстальщик добавляет в виджет (в html) callback="myFunc()" и эта функция будет выполнятся при "завершении" любого виджета.

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Янв. 25, 2016, 5:17 п.п., спустя 30 дней 16 часов 57 минут

    @Oleg, спасибо!

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Янв. 25, 2016, 6 п.п., спустя 42 минуты 5 секунд

    Блин, как я профтыкал ответ. Да, спасибо большое, все в общем понятно теперь.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!