Как добавить кучу глобальных фильтров в Vue.js?



Я хочу использовать несколько глобальных фильтров в Vue.JS app. Я знаю, что мне нужно определить их перед моим главным экземпляром Vue, но вставляю их все в " main.файл js не кажется мне правильным с точки зрения организации кода. Как я могу иметь определения в отдельном файле, импортированном в ' main.Джей Си? Никак не могу взять в толк, что такое импорт/экспорт.

655   3  

3 ответов:

Создайте фильтры.файл js.

import Vue from "vue"

Vue.filter("first4Chars", str => str.substring(0, 4))
Vue.filter("last4Chars", str => str.substring(str.length - 4))

Импортируйте его в свой main.JS.

import Vue from 'vue'
import App from './App'
import "./filters"

new Vue({
  el: '#app',
  template: '<App/>',
  components: { App },
})

Вот рабочий пример.

Я думаю, что лучший способ-это использовать функцию pluginиз VueJS

  1. Создайте папку filters и поместите туда все фильтры ...

    - filters
      | - filter1.js
      | - index.js
    
  2. В файле filter экспортируйте нужную вам функцию, в этом примере я буду использовать фильтр верхнего регистра:

    export default function uppercase (input) {
        return input.toUpperCase();
    }
    
  3. В index.js импортируем и создаем плагин:

    import uppercase from './filter1';
    
    
    export default {
         install(Vue) {
             Vue.filter('uppercase', uppercase);
         }
    }
    
  4. В тебе главное.JS файл use it

    import filters from './filters';
    import Vue from 'vue';
    
    Vue.use(filters);
    

Что мне нравится делать, так это

  1. Есть фильтр на файл (модуль es6)

  2. Зарегистрируйте фильтр глобально с помощью vue в модуле

  3. Также экспортируйте функцию фильтра как экспорт по умолчанию

Например, для простого фильтра, который помещает разделители запятых в числа, я создаю NumberFilter.js и NumberFilter.тест.js

NumberFilter.js

import Vue from 'vue';
import numeral from 'numeral';

const NumberFilter = number => numeral(value).format('0,0');

Vue.filter('number', numberFilter);

export default numberFilter;

NumberFilter.тест.js

import NumberFilter from './NumberFilter';

describe('NumberFitler', () => {
   it('exists', () => {
      expect(NumberFilter).toBeDefined();
   });

   it('does its thing', () => {
       expect(NumberFilter(1234)).toEquals('1,234');   
   });
});

Это стратегия позволяет мне использовать этот фильтр в коде в качестве стандартного модуля es6, а также в моих шаблонах Vue.

В реальном мире я бы, вероятно, высмеял цифру в своем тесте и просто убедился в результате .формат был вызван с правильным числовым форматом.

Comments

    Ничего не найдено.