Vueタンデムフィルタの使用シーンを詳しく説明します。
普段の開発では、フィルタを使うところがたくさんあります。たとえば、単位転換、数字打点、テキストフォーマットなどです。
30000=>30,000
もちろんこれは一般的な使い方です。何も言いません。以下では、開発中に出会った直列フィルタの使用シーンを紹介します。
注文リストを取得する必要があると仮定すると、各項目のstatusフィールドは注文状態を表します。
フィルターについては、ここで注意すべき点があります。フィルタは、純粋な関数 でなければなりません。フィルタの中でvueのインスタンスが得られません。これはvueが意図的に作った です。グローバルにフィルタを登録するのはVue.filter()で、局部はfilters:{} です。方法でフィルタを呼び出す方法は、this.$options.filters.XXX
ここで、Vueタンデムフィルタの使用シーンを詳しく説明する文章を紹介します。Vueタンデムフィルタの内容については、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。
Vue.filter('toThousandFilter', function (value) {
if (!value) return ''
value = value.toString()
return .replace(str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g, '$1,')
})
実現効果:30000=>30,000
もちろんこれは一般的な使い方です。何も言いません。以下では、開発中に出会った直列フィルタの使用シーンを紹介します。
注文リストを取得する必要があると仮定すると、各項目のstatusフィールドは注文状態を表します。
{
id: '',
order_num: '123456789',
goodList: [ ... ],
address: { ... },
status: 1 // 1 2 3
}
このデータを手に入れたら、v-forの時、必ずこうします。
<template>
<!-- ... -->
<span class="order_status">{{ orderItem.status | getOrderStatus }}</span>
<!-- ... -->
</template>
<script>
export default {
// ...
filters: {
getOrderStatus(status) {
switch (status.toString()) {
case '1':
return ' ';
case '1':
return ' ';
case '1':
return ' ';
default:
return '';
}
}
}
// ...
}
</script>
<style scoped type="scss">
// ...
.order_status {
font-size: 14px;
}
// ...
</style>
このように状態を表す1,2,3は前払となり、出荷待ちとなります。これは大丈夫です。しかし、注文が来ました。未払いの場合、状態を表す文字は赤色であるべきです。支払い待ちの状態で文字が赤色になります。この問題はもう悩んでいます。いろいろな方法を使って、需要を実現しましたが、結局はあまり優雅ではありませんでした。最近までvue文書を見ていて、直列フィルタの使い方を思い出しました。この要求を完璧に解決できます。
<template>
<!-- ... -->
<span class="order_status" :class="orderItem.status | getOrderStatus | getOrderStatusClass">{{ orderItem.status | getOrderStatus }}</span>
<!-- ... -->
</template>
<script>
export default {
// ...
filters: {
getOrderStatus(status) {
switch (status.toString()) {
case '1':
return ' ';
case '1':
return ' ';
case '1':
return ' ';
default:
return '';
}
},
getOrderStatusClass(status) {
if (status === ' ') {
return 'not-pay'
}
return ''
}
}
// ...
}
</script>
<style scoped type="scss">
// ...
.order_status {
font-size: 14px;
&.not-pay {
color: red;
}
}
// ...
</style>
こんなに簡単です。フィルターについては、ここで注意すべき点があります。