VueJS:动态设置组件的方法

时间:2020-02-14 10:11:52

标签: javascript vue.js single-page-application

我有一个具有单页组件的SPA应用程序;我想根据我的路线名称为组件导入某些方法。如何在Vue中实现?像这样:

<template>
    <div>
        <div v-for="foo in customMethod()">{{foo.bar}}</div>
    </div>
</template>

<script>
export default {
    methods: {},

    mounted: function() {
        switch(this.$route.name) {
            case "route.name":
                this.methods = require('./external-script.js');
                break;
            case "another.route.name":
                this.methods = require('./another-external-script.js');
                break;
        }
    }
}

</script>

2 个答案:

答案 0 :(得分:1)

此描述似乎是一个策略设计模式可以解决的问题,因为根据路由名称需要一种不同的行为。看看这个post。如果不是您的意图,则可以尝试Vue dynamic components

答案 1 :(得分:0)

如丹在评论中所述,这是不可能的。因此,我采用了Evandro建议的策略模式概念。安装组件时,我将根据路由名称导入外部文件。

<template>
    <div>
        <div v-for="foo in method1()">{{foo.bar}}</div>
    </div>
</template>

<script>
export default {
    data: function() {
        m: {},
        // ..
    },

    methods: {
        method1: function(params) {
            return m.method1(params)
        },

        method2: async function(params){
            return await m.method2(params, this.another_param);
        },

        // ...
    },

    mounted: function() {
        switch(this.$route.name) {
            case "route.name":
                this.m = require('./external-script.js');
                break;
            case "another.route.name":
                this.m = require('./another-external-script.js');
                break;
        }
    }
}

</script>

请注意,取决于组件的安装方式,基于mounted()中路由的脚本可能并不总是有效。

相关问题