error Filters are deprecated 如何解决 vue.js 3 中的此错误

Mah*_*iab 6 javascript vue.js vuejs3

我正在尝试在 vue.js 3 中使用过滤器将数据过滤为大写,但是当任何过滤器出现时会出现此错误?我尝试了很多解决方案,但没有办法

main.js:

import Vue from "vue";
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import "bootstrap";
import "bootstrap/dist/css/bootstrap.min.css";
import "./scss/main.scss";
import "normalize.css";

createApp(App).use(store).use(router).mount("#app");

    new Vue({
        router,
        store,
        render: h => h(App)
    }).$mount("#app");
    
    Vue.config.productionTip = false;
    
    Vue.filter('uppercase', function (v){
       return v.toUpperCase()
    });
Run Code Online (Sandbox Code Playgroud)

我使用过滤器的组件:

<template>
    <div class="post-box">
        <span class="views">{{ views }}</span>
        <h3 class="title">{{title}}</h3>
        <span class="date">{{ date }}</span>
        <p class="content">{{ content }}</p>
        <div class="row">
          <div class="col-sm-6 author">
            <span class="post-author">{{author | uppercase }}</span>
          </div>
          <div class="col-sm-6 category">
            <span class="post-category">{{category}}</span>
          </div>
        </div>
      </div>
    </template>
    
    <script>
    export default {
      props: ['title','content','author','category','date','views'],
      name: "BlogPost",
    };
    </script>
Run Code Online (Sandbox Code Playgroud)

你能帮我吗

Bou*_*him 8

解决方案是使用计算属性而不是在 vue 3 中删除的过滤器:在 main.js 中删除import Vue from 'vue'和:

new Vue({
        router,
        store,
        render: h => h(App)
    }).$mount("#app");
    
    Vue.config.productionTip = false;
    
    Vue.filter('uppercase', function (v){
       return v.toUpperCase()
    });
Run Code Online (Sandbox Code Playgroud)

在子组件中定义该属性并在模板内使用它,如下所示:

<template>
     ...
          <div class="col-sm-6 author">
            <span class="post-author">{{ uppercase(author) }}</span>
          </div>
     ...
    </template>
    
    <script>
    export default {
      props: ['title','content','author','category','date','views'],
      name: "BlogPost",
      computed:{
         uppercase(){
            return (v)=>{
              return v.toUpperCase()
              }
           }
     }
    };
    </script>
Run Code Online (Sandbox Code Playgroud)

  • @DennyBiasiolli,它可以作为一种方法工作,但建议使用计算属性,因为它将被缓存 (2认同)