在Vue.js中如何在单独的文件中编写自定义过滤器,并通过在main.js中声明在各种组件中使用它们?

Din*_*pta 14 vue.js

我试过这样做,但它不起作用.

// filter.js

export default {
    converTimestamp: function (seconds) {
      var date = new Date(seconds * 1000);
      return date.toDateString();
    }
};

// main.js

import customFilters from './store/filters';
Run Code Online (Sandbox Code Playgroud)

Dec*_*oon 41

这是一个例子:

// MyFilter.js
import Vue from 'vue';

Vue.filter('myFilter', value => {
  return value.toUpperCase();
});
Run Code Online (Sandbox Code Playgroud)
// main.js
import './MyFilter.js';
Run Code Online (Sandbox Code Playgroud)

如果您不想全局注册过滤器,可以这样做:

// MyFilter.js
export default function (value) {
  return value.toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)
// MyComponent.vue
import MyFilter from './MyFilter.js';

export default {
  filters: {
    MyFilter,
  },
};
Run Code Online (Sandbox Code Playgroud)


cle*_*lem 6

如果没有那么多过滤器,也可以在一个文件中定义它们:

// filters.js
export default {
    filterA: () => {},
    filterB: () => {},
}
Run Code Online (Sandbox Code Playgroud)

并将它们导入全球:

// main.js
import filters from './filters';
for(let name in filters) {
    Vue.filter(name, filters[name]);
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上,导入过滤器的更好方法是:`Object.keys(filters).forEach(key => Vue.filter(key,filters [key])))它防止触发“后卫保护”规则来自ESLint。 (2认同)