我已经建立了一个文件来保存附加到Vue对象的过滤器,这是required
在我的App.js中。但是我有一个过滤器,理想情况下会使用另一个过滤器:
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对象,有没有办法解决? 我当然可以重复日期格式代码,但我不希望重复。
答案 0 :(得分:0)
我通常要做的是创建对您的主要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()
访问过滤器。
这可能不是理想的选择,但是它在很多情况下都帮助了我,您必须定义一些插件/服务/组件,而这些插件/服务/组件却无法为您提供其使用的当前Vue实例。
答案 1 :(得分:0)
一个选择是分开定义和全局注册
(加上它现在在非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)