Привет, народ!

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

В компонентах Vue фильтры - это функции, которые позволяют нам получать различные форматы вывода динамических данных о его состоянии. То есть они не изменяют данные компонента, они могут только форматировать свои данные при рендеринге.

Локальные фильтры

Согласно официальной документации, использование фильтров происходит в интерполяциях усов и выражениях v-bind. Смотрите пример форматирования фильтра в шаблоне:

<!-- in interpolations text --> 
{{ message | capitalize }}  
<!-- in attribute interconnections --> 
<div v-bind:text="message | capitalize"></div>

Создавая локально внутри компонента, мы можем иметь:

filters: {
   capitalize(value) {
     if (!value) return ''
     value = value.toString()
     return value.charAt(0).toUpperCase() + value.slice(1)
   }
}

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

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

Глобальные фильтры

Существуют определенные ситуации, когда конкретный фильтр может использоваться для нескольких компонентов в вашем приложении, особенно в тех более крупных проектах, где несколько взаимодействий системы могут происходить на протяжении всего проекта.

Для этого существует возможность создания глобальных фильтров, и, как я уже сказал ранее, в равной степени, для миксинов, плагинов, среди прочего, они доступны в любом месте вашего проекта, облегчая их использование и повторное использование кодов.

Vue.filter('capitalize', function (value) {
   if (!value) return ''
   value = value.toString()
   return value.charAt(0).toUpperCase() + value.slice(1)
})
new Vue({
   // your Vue instance...
})

В этом примере мы видим создание глобального фильтра с использованием свойства .filter внутри main.js. Если ваше приложение использует много фильтров, по организационным причинам рекомендуется создать отдельный файл, поместить в него все фильтры и импортировать их в файл main.js. И есть очень важная деталь, о которой всегда следует помнить: когда глобальный фильтр имеет то же имя, что и локальный фильтр, локальный фильтр будет иметь приоритет.

Поскольку фильтры являются функциями JavaScript, они принимают значение, которое нужно преобразовать, в качестве первого параметра. Вы также можете передать столько аргументов, сколько вам нужно, в соответствии с потребностями вашего приложения.

{{ message | filterA('arg1', arg2) }}

Так же, как мы можем передать несколько аргументов, можно связать несколько фильтров, для этого нам просто нужно использовать символ вертикальной черты (|), и через несколько фильтров преобразования мы получаем одно значение.

filters: {
    Upper(value) {
       return value.toUpperCase();
    },
        
    Lower(value) {
       return value.toLowerCase();
    },
}

А внутри значения мы используем его следующим образом:

{{ message | Upper | Lower }}

Конечно, в этом примере не будет никакой функциональности, но просто чтобы продемонстрировать, что можно поместить несколько фильтров в одно значение, и, как я уже упоминал, они связаны, функция Lower будет выполняться после получения результата Upper, будучи прошел как единственный аргумент Нижнего.

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

Если вам понравилась эта статья, обязательно поделитесь и прокомментируйте. Если вы хотите узнать немного больше, обменяться идеями, вы можете оставить свое мнение по теме в комментариях и даже предложить что-то для следующих статей.

Наслаждайтесь и познакомьтесь с моей работой, посетите веб-сайт www.fsenaweb.me, на нем есть мое портфолио, мои социальные сети (в том числе GitHub, где у вас есть несколько примеров приложений для практики с Vue.js), и небольшое пространство для контактов.



И обязательно присоединяйтесь к нашей группе, и Vue.js в Бразилии через Telegram (VueJS Brasil) имеет особую галерею, готовую обменяться другим опытом.

Вот и все, увидимся в следующий раз! Меня зовут Матеус Рикелли, и за ваше внимание моя благодарность!