如何在 Vue 2 中呈现嵌套元素的过滤器?

How to render filter of a nested element in Vue 2?

我在 Vue 中有以下内容 1.x

<tr v-for="product in products">
   <td><img src="{{ product.image_url | thumbnail }}" class="thumbnail"></td>
</tr>

但在 Vue 2 中我尝试过:

 <tr v-for="product in products">
   <td><img :src="product.image_url | thumbnail" class="thumbnail"></td>
 </tr>

and got "Property or method "thumbnail" 未在实例上定义,但在渲染期间被引用。确保在数据选项中声明反应数据属性"=12=]

注意:当我将它分配给 html 元素上的 属性 时,常规胡须插值过滤器不起作用(即:{{ data | filter }} 工作正常纯文本,但在尝试执行 src="{{ data | filter }}" 时不是。

我尝试了计算 属性 但它不起作用,因为我试图获取计算值的元素是数组中的每个元素(我正在遍历数组中的每个元素).

缩略图所做的只是做一些正则表达式和花哨的文本替换。不确定在 vue2 中执行此操作的最佳方法。

Vue.js 2.0

Filters can now only be used inside text interpolations ({{}} tags). In the past we've found using filters with directives such as v-model, v-on etc. led to more complexity than convenience, and for list filtering on v-for it is more appropriate to move that logic into JavaScript as computed properties.

使用计算 属性:

new Vue({
    el: '#app',
    data: {
        products: [],
    },

    computed: {
        filterProducts() {
            return this.products.filter(function(product) {
                ...
            })
        }
    }
})

Vue.js 希望您先定义过滤器,然后再在模板中使用它们。下面是一个如何定义日期格式化过滤器的示例:

// Define the date time format filter
Vue.filter("formatDate", function(date) {
    return moment(date).format("MMMM D, YYYY")
})

一旦你有了它,你就可以在代码中使用它,如下所示:

<div class="due-date">{{dueDate | formatDate}}</div>

你能告诉我 thumbnail 过滤器应该做什么吗?对于图像,我认为您无法在客户端进行任何处理。您可以显示一些预定义大小的缩略图,这是您在 CSS 中会做的事情,而不是使用过滤器。