Документация Engee

Директивы компонентов

Директива в контексте веб-разработки и таких фреймворков, как Vue.js, Angular и им подобных, представляет собой специальный токен в разметке, который предписывает библиотеке или фреймворку выполнить какое-либо действие с элементом на странице. Директивы — это расширенные атрибуты HTML с префиксом в виде специального символа или ключевого слова. Например, это могут быть символы v- для Vue.js или ng- для Angular. Директивы применяют реактивное поведение к DOM или даже могут преобразовывать элемент DOM и его дочерние элементы.

Директивы Vue.js — это параметры типа v-, например v-if или v-on. В Stipple они реализуются посредством макросов @click, @on, @iif, @els, @elsiif, @recur, @text, @bind, @data и @showif. Каждый макрос дает возможность производить операции с компонентом в коде пользовательского интерфейса путем формирования эквивалентного кода HTML, например:

julia> span(@showif(true))
"<span v-show=\"true\"></span>"

julia> span(@click(:mybutton))
"<span v-on:click=\"mybutton = true\"></span>"

julia> span(@click("process = !process"))
"<span v-on:click=\"process = !process\"></span>"

Обратите внимание: если директива принимает строковый аргумент, его содержимое должно представлять собой допустимый код JavaScript.

Создание компонентов в цикле с помощью @recur

Макрос @recur позволяет создавать компоненты пользовательского интерфейса путем перебора списка. Он добавляет цикл for, который перебирает указанный список. В каждой итерации вложенные компоненты оцениваются с использованием текущего значения переменной цикла.

module App
using GenieFramework
@genietools

@app begin
    @out messages = ["msg1", "msg2", "msg3"]
end

function ui()
    row([card(style="margin: 10px;", @recur("msg in messages"), [
        p("{{msg}}")
    ]),])
end
@page("/", ui)
end

В этом примере макрос @recur используется для перебора списка messages. Для каждого сообщения в списке создается компонент абзаца (p) с содержимым сообщения. В результате получается ряд карточек, каждая из которых содержит абзац с одним из сообщений.

Макрос @recur особенно полезен, когда нужно создать большое количество похожих компонентов на основе списка данных. Он позволяет избежать повторяющегося кода и делает приложение более удобным в обслуживании и масштабируемым.

Условное отображение с помощью @showif

Макрос @showif служит для условного отображения элементов пользовательского интерфейса в зависимости от состояния реактивной переменной. Его можно использовать с кнопкой для отображения или скрытия элемента в пользовательском интерфейсе:

@app begin
    @in show_element = false
end

function ui()
    [
        btn("Toggle Element", @click("show_element =! show_element")),
        div("This is a hidden element", @showif("show_element"))
    ]
end

В этом примере при нажатии кнопки Toggle Element (Переключить элемент) меняется состояние реактивной переменной show_element, что, в свою очередь, изменяет видимость элемента div. Когда show_element имеет значение true, элемент div отображается, а когда show_element имеет значение false, он скрывается.