Powiedzmy, że mam taką instancję 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?
}
}
}
Mogę łatwo użyć filtra w takim szablonie:
<span>The word is {{ word | capitalize }}</span>
Ale jak mogę użyć tego filtru z poziomu metody instancji lub właściwości obliczonej? (Oczywiście ten przykład jest trywialny, a moje rzeczywiste filtry są bardziej złożone).
javascript
vue.js
harryg
źródło
źródło
this.$options
nie mafilters
właściwości.this.$root.$options.filters
To właśnie zadziałało dla mnie
Definiowanie filtra
//credit to @Bill Criswell for this filter Vue.filter('truncate', function (text, stop, clamp) { return text.slice(0, stop) + (stop < text.length ? clamp || '...' : '') });
Korzystanie z filtra
import Vue from 'vue' let text = Vue.filter('truncate')(sometextToTruncate, 18);
źródło
import Vue from 'vue'
nowej zmiennej i tworzenie jej, gdy taka już istnieje.Możesz utworzyć
vuex
podobną funkcję pomocniczą, aby odwzorować globalnie zarejestrowane filtry na obiekt metod komponentu 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; }, {}); }
Stosowanie:
import { mapFilters } from './map-filters'; export default { methods: { ...mapFilters(['linebreak']) } }
źródło
jeśli twój filtr jest podobny do tego
<span>{{ count }} {{ 'item' | plural(count, 'items') }}</span>
to jest odpowiedź
this.$options.filters.plural('item', count, 'items')
źródło
Aby uzupełnić odpowiedź Morrisa, jest to przykład pliku, którego zwykle używam do umieszczania filtrów w środku, możesz użyć w dowolnym widoku za pomocą tej metody.
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, '.') })
źródło
windows.Vue
i tak sięwindows.moment
dzieje, chyba że jest to absolutnie konieczne, bez żadnego innego sposobu.