猿问

vue注册了全局方法,调用的时候获取不到怎么办

这是打印的Vue.prototype,和this.$moment();


以下是main.js中的代码


import moment from 'moment';

Object.defineProperty(Vue.prototype, '$moment', { value: moment });

// Vue.prototype.$moment=moment;

console.log(Vue.prototype);

console.log(this.$moment());

根据楼上大神所说,main.js直接打印this.$moment 跟在组件中this.$moment的this不是一个this,应该直接在组件中输入,我试了下,确实可以在组件中输出


console.log(this.$moment());

但是使用相关的方法依然不生效:

https://img2.mukewang.com/5c9c237c0001fe2408000243.jpg

created(){

      console.log(this.$moment());

      this.$moment.locale('zh-cn');

    },

    filters:{

      formatTime(time){

        return this.$moment(time).fromNow();

      },

    },


慕森王
浏览 5711回答 6
6回答

翻阅古今

在组件中可以使用 this.$moment() 这种方式调用,在 main.js中是不行的,这时候this指向window,你可以使用 Vue.prototype.$moment() 这样的方式调用

海绵宝宝撒

在main.js引入:在组件中引用:

qq_遁去的一_1

看了下报错信息,应该是this的取值不对。 看看有没有在选项中(钩子函数 or data or watch or computed)用了箭头函数。没有具体的代码只能想到这个了。试了一下,在filters中this不是vue实例。建议通过computed属性来实现你的需求。搜了下相关信息:尤大原话:This is intentional in 2.x. Filters should be pure functions and should not be dependent on this context. If you need this you should use a computed property or just a method e.g. $translate(foo)简单来说就是vue2+是故意不给你在filters里取到this的~

三国纷争

单页面组件开发时,Vue 不是一个全局对象,它只在 main.js 上可以直接访问。可以在 main.js 中把 Vue 挂在window下,如下:import moment from 'moment';Object.defineProperty(Vue.prototype, '$moment', { value: moment });// Vue.prototype.$moment=moment;console.log(Vue.prototype);console.log(this.$moment());window.Vue = Vue;

慕少森

打印出 this,就在里面找啊;找不到?那肯定是没绑定了;想用 this调用,肯定要绑定到原型链上,那就去 main.js 绑定,Vue.prototype.moment = moment导入组件后this.moment调用

holdtom

楼上 faymi 的回答很对。除此之外,楼主还可以在每个组件中按需导入,直接使用即可,比如在 ChildA.vue中,import moment from "moment";console.log(moment('2018-04-16').toDate());
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答