Vue.js,使用插件方法

Posted

技术标签:

【中文标题】Vue.js,使用插件方法【英文标题】:Vue.js, Use plugin methods 【发布时间】:2018-05-03 02:04:42 【问题描述】:

我是第一次使用 Vue 构建 SPA。我将重用几个功能,但似乎无法使其工作。我收到错误"this.ExperienceToLevel is not a function"

同时,我什至不确定创建插件是实现我想要实现的目标的最佳方式。也就是说,使一些函数成为全局的“Vue 方式”。我想将其分配给 window,例如 window.UserLevel = new UserLevel()

UserLevel.js

/*
Create Levels array
 */
let Levels = [];
for (let i = 0; i < 100; i++) 
    let xp = Math.floor(Math.pow(i, 1.3) * 100);
    Levels.push(xp);


/*
Create UserLevel Plugin
 */
const UserLevel = 
    install(Vue, options) 
        Vue.ExperienceToLevel = function (xp) 
            for (const [level, levelXP] of Object.entries(options.levels)) 
                if (levelXP > xp) 
                    return level-1;
                
            
        

        Vue.LevelToExperience = function (level) 
            return options.levels[level];
        

        Vue.ExperiencePercent = function (level) 
            return ((this.xp - this.LevelToExperience(this.level)) / (this.LevelToExperience(this.level + 1) - this.LevelToExperience(this.level))) * 100;
        
    
;

export 
    Levels,
    UserLevel
;

我尝试将插件导入到这样的组件中:

import  UserLevel, Levels  from './../../UserLevel';
Vue.use(UserLevel,  levels: Levels );

并像这样使用全局方法:this.ExperienceToLevel(this.xp)

【问题讨论】:

【参考方案1】:

根据Vue documentation on Plugins,你有两种选择:

mixin 中声明这些方法:

const UserLevel = 
    install(Vue, options) 
        Vue.mixin(
            methods: 
                ExperienceToLevel(xp)  ... ,
                LevelToExperience(level)  ... ,
                ExperiencePercent(level)  ... ,
            
        )
    
;

或者将它们绑定到Vue.prototype:

Vue.prototype.$ExperienceToLevel = function (xp)  ... 
Vue.prototype.$LevelToExperience = function (level)  ... 
Vue.prototype.$ExperiencePercent = function (level)  ... 

我会选择前者。

【讨论】:

我也投票给前者。我刚刚注意到从模板调用原型方法会丢失this 对象。

以上是关于Vue.js,使用插件方法的主要内容,如果未能解决你的问题,请参考以下文章

vue高级用法

vue自定义全局组件并通过全局方法 Vue.use() 使用该组件

Vue.js 插件

怎样在Vue.js中使用jquery插件

怎样在Vue.js中使用jquery插件

怎样在Vue.js中使用jquery插件