В Vue.js, как написать собственные фильтры в отдельном файле и использовать их в различных компонентах, объявив в main.js?
Я попытался сделать это, но это не сработает.
// filter.js
export default {
converTimestamp: function (seconds) {
var date = new Date(seconds * 1000);
return date.toDateString();
}
};
// main.js
import customFilters from './store/filters';
Ответы
Ответ 1
Вот пример:
// MyFilter.js
import Vue from 'vue';
Vue.filter('myFilter', value => {
return value.toUpperCase();
});
// main.js
import './MyFilter.js';
Если вы не хотите регистрировать фильтры по всему миру, вы можете сделать это следующим образом:
// MyFilter.js
export default function (value) {
return value.toUpperCase();
}
// MyComponent.vue
import MyFilter from './MyFilter.js';
export default {
filters: {
MyFilter,
},
};
Ответ 2
Если у вас не так много фильтров, вы также можете определить их в одном файле:
// filters.js
export default {
filterA: () => {},
filterB: () => {},
}
И импортировать их глобально:
// main.js
import filters from './filters';
for(let name in filters) {
Vue.filter(name, filters[name]);
}
Ответ 3
Мы можем создать плагин для этого:
// filters.js
import Vue from 'vue'
export function truncate( text, length, suffix = '...' ) {
if (text.length > length) {
return text.substring(0, length) + suffix;
} else {
return text;
}
}
export function json( value ) {
return JSON.stringify(value);
}
const filters = { truncate, json }
Object.keys( filters ).forEach( key => {
Vue.filter( key, filters[ key ] )
})
затем добавьте этот новый плагин в конфиг
export default {
plugins: ['~/plugins/filters.js']
}