Скажем, у меня есть такой экземпляр Vue:
new Vue({
el: '#app',
data: {
word: 'foo',
},
filters: {
capitalize: function(text) {
return text.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
}
},
methods: {
sendData: function() {
var payload = this.$filters.capitalize(this.word); // how?
}
}
}
Я легко могу использовать фильтр в шаблоне следующим образом:
<span>The word is {{ word | capitalize }}</span>
Но как я могу использовать этот фильтр из метода экземпляра или вычисляемого свойства? (Очевидно, что этот пример тривиален, а мои настоящие фильтры более сложные).
javascript
vue.js
Гарриг
источник
источник
this.$options
не имеетfilters
собственности.this.$root.$options.filters
Это то, что сработало для меня
Определение фильтра
//credit to @Bill Criswell for this filter Vue.filter('truncate', function (text, stop, clamp) { return text.slice(0, stop) + (stop < text.length ? clamp || '...' : '') });
Использование фильтра
import Vue from 'vue' let text = Vue.filter('truncate')(sometextToTruncate, 18);
источник
import Vue from 'vue'
и создавать новую переменную, если она уже существует.Вы можете создать
vuex
подобную вспомогательную функцию для сопоставления глобально зарегистрированных фильтров с объектом методов компонента vue:// map-filters.js export function mapFilters(filters) { return filters.reduce((result, filter) => { result[filter] = function(...args) { return this.$options.filters[filter](...args); }; return result; }, {}); }
Применение:
import { mapFilters } from './map-filters'; export default { methods: { ...mapFilters(['linebreak']) } }
источник
если ваш фильтр что-то вроде этого
<span>{{ count }} {{ 'item' | plural(count, 'items') }}</span>
это ответ
this.$options.filters.plural('item', count, 'items')
источник
В дополнение к ответу Морриса это пример файла, который я обычно использую для помещения фильтров внутрь, вы можете использовать его в любом представлении с помощью этого метода.
var Vue = window.Vue var moment = window.moment Vue.filter('fecha', value => { return moment.utc(value).local().format('DD MMM YY h:mm A') }) Vue.filter('ago', value => { return moment.utc(value).local().fromNow() }) Vue.filter('number', value => { const val = (value / 1).toFixed(2).replace('.', ',') return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.') }) Vue.filter('size', value => { const val = (value / 1).toFixed(0).replace('.', ',') return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.') })
источник
windows.Vue
иwindows.moment
делает, если в этом нет крайней необходимости, без каких-либо других способов.