Disons que j'ai une instance Vue comme ceci:
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?
}
}
}
Je peux facilement utiliser le filtre dans un modèle comme celui-ci:
<span>The word is {{ word | capitalize }}</span>
Mais comment puis-je utiliser ce filtre à partir d'une méthode d'instance ou d'une propriété calculée? (Évidemment, cet exemple est trivial et mes filtres actuels sont plus complexes).
javascript
vue.js
harryg
la source
la source
this.$options
n'a pas defilters
propriété.this.$root.$options.filters
C'est ce qui a fonctionné pour moi
Définition du filtre
//credit to @Bill Criswell for this filter Vue.filter('truncate', function (text, stop, clamp) { return text.slice(0, stop) + (stop < text.length ? clamp || '...' : '') });
Utilisation du filtre
import Vue from 'vue' let text = Vue.filter('truncate')(sometextToTruncate, 18);
la source
import Vue from 'vue'
et de créer une nouvelle variable alors qu'elle existe déjà.Vous pouvez créer une
vuex
fonction d'assistance similaire pour mapper des filtres enregistrés globalement dans l'objet de méthodes d'un composant 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; }, {}); }
Usage:
import { mapFilters } from './map-filters'; export default { methods: { ...mapFilters(['linebreak']) } }
la source
si votre filtre est quelque chose comme ça
<span>{{ count }} {{ 'item' | plural(count, 'items') }}</span>
c'est la réponse
this.$options.filters.plural('item', count, 'items')
la source
Pour compléter la réponse de Morris, voici un exemple de fichier que j'utilise normalement pour mettre des filtres à l'intérieur, que vous pouvez utiliser dans n'importe quelle vue en utilisant cette méthode.
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, '.') })
la source
windows.Vue
etwindows.moment
fait, sauf si vous devez absolument le faire, sans autre moyen.