我如何从VUE中的另一个访问一个附件的过滤器



我已经设置了一个文件以将附加到我的vue对象的过滤器保存,这是我的app.js中的 required。但是,我有一个过滤器,理想情况下可以使用另一个过滤器:

Vue.filter('formatDateTime', value => {
    if (value)  return moment(String(value)).format('DD-MMM-YY hh:mm')
});
Vue.filter('getActivity', value =>
    (!value.lastvisited)
        ? 'Not visited yet' 
        : 'Last logged in ' + Vue.$options.filters.formatDateTime(value.lastvisited)
)

但是它不能引用全局vue对象,有没有办法解决这个问题?我当然可以重复日期格式的代码,但我宁愿不。

一个选项是分开定义和全局注册

(加上它现在可在非票据上下文中可用/可进口)

// ie. in filters.js
export const formatDateTime = value => value 
  ? moment(String(value)).format('DD-MMM-YY hh:mm') 
  : null
export const getActivity = value => !value.lastvisited
  ? 'Not visited yet' 
  : 'Last logged in ' + formatDateTime(value.lastvisited)
// ie. in in a filter-global-registration.js
import { getActivity, formatDateTime } from 'filters.js'
Vue.filter('formatDateTime', formatDateTime);
Vue.filter('getActivity', getActivity)

我通常要做的就是创建对您的主要vue对象的全局引用,例如:

// Create a filter which calls another filter.
Vue.filter('myFilter', () => {
    window.Vue.$options.filters.myOtherFilter(...);
});
// Initialize the main Vue object.
window.Vue = new Vue({
});

然后,您应该能够使用过滤器功能中的window.Vue.$options.filters.myOtherFilter()访问过滤器。

它可能不是理想的选择,但是它在几次中都帮助我定义了插件/服务/组件,这些插件/服务/组件不会为您提供当前使用的实例。

最新更新