weizhenye / vue-highcharts

:bar_chart: Highcharts component for Vue

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

如何在使用vue-router的情况下在其余的component中使用

C1tas opened this issue · comments

commented

请教一下,如何在这种情况下使用
like
TestLineChart.vue

<template>
    <highcharts :options="options"></highcharts>
</template>

<script type="text/babel">
    export default {
        name: 'demo',
        data: () => ({
            options: {

                chart: {
                    type: 'heatmap',
                    marginTop: 40,
                    marginBottom: 80,
                    plotBorderWidth: 1
                },


                title: {
                    text: 'Sales per employee per weekday'
                },

                xAxis: {
                    categories: ['Alexander', 'Marie', 'Maximilian', 'Sophia', 'Lukas', 'Maria', 'Leon', 'Anna', 'Tim', 'Laura']
                },

                yAxis: {
                    categories: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
                    title: null
                },

                colorAxis: {
                    min: 0,
                    minColor: '#FFFFFF',
                    maxColor: '#FFFFFF'
                },

                legend: {
                    align: 'right',
                    layout: 'vertical',
                    margin: 0,
                    verticalAlign: 'top',
                    y: 25,
                    symbolHeight: 280
                },

                tooltip: {
                    formatter: function () {
                        return '<b>' + this.series.xAxis.categories[this.point.x] + '</b> sold <br><b>' +
                            this.point.value + '</b> items on <br><b>' + this.series.yAxis.categories[this.point.y] + '</b>';
                    }
                },

                series: [{
                    name: 'Sales per employee',
                    borderWidth: 1,
                    data: [[0, 0, 10], [0, 1, 19], [0, 2, 8], [0, 3, 24], [0, 4, 67], [1, 0, 92], [1, 1, 58], [1, 2, 78], [1, 3, 117], [1, 4, 48], [2, 0, 35], [2, 1, 15], [2, 2, 123], [2, 3, 64], [2, 4, 52], [3, 0, 72], [3, 1, 132], [3, 2, 114], [3, 3, 19], [3, 4, 16], [4, 0, 38], [4, 1, 5], [4, 2, 8], [4, 3, 117], [4, 4, 115], [5, 0, 88], [5, 1, 32], [5, 2, 12], [5, 3, 6], [5, 4, 120], [6, 0, 13], [6, 1, 44], [6, 2, 88], [6, 3, 98], [6, 4, 96], [7, 0, 31], [7, 1, 1], [7, 2, 82], [7, 3, 32], [7, 4, 30], [8, 0, 85], [8, 1, 97], [8, 2, 123], [8, 3, 64], [8, 4, 84], [9, 0, 47], [9, 1, 114], [9, 2, 31], [9, 3, 48], [9, 4, 91]],
                    dataLabels: {
                        enabled: true,
                        color: '#000000'
                    }
                }]
            }
        }),
        methods: {}
    };
</script>

但是这里没又vue.use以及highcharts component的定义

在入口文件 app.js 里 Vue.use 后,全局都可以使用 <highcharts> 的。

另外,在单个组件内部的 <script> 里也可以 import 进来然后 Vue.use

commented

但是我在页面渲染的时候得到了没有 highcharts 标签的提示
main.js

import Vue from 'vue'
import App from './App'
import router from './router'
import Vuetify from 'vuetify'
import VueHighcharts from './vue-highcharts';
import Highcharts from 'highcharts';
import 'vuetify/dist/vuetify.min.css';

Vue.use(Vuetify);

Vue.use(VueHighcharts, { Highcharts });

Vue.config.productionTip = false;

/* eslint-disable no-new */
new Vue({
    el: '#app',
    router,
    template: '<App/>',
    components: {App}
});

router/index.js

import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/components/Home';
import Test from '@/components/Test';
Vue.use(Router);

export default new Router({
    routes: [
        {
            path: '/',
            name: 'home',
            component: Home
        },
        {
            path: '/test',
            name: 'test',
            component: Test
        }
    ]
});

components/TestLineChart.vue

<template>
    <highcharts :options="options"></highcharts>
</template>

<script type="text/babel">
    export default {
        name: 'demo',
        data: () => ({
            options: {

                chart: {
                    type: 'heatmap',
                    marginTop: 40,
                    marginBottom: 80,
                    plotBorderWidth: 1
                },


                title: {
                    text: 'Sales per employee per weekday'
                },

                xAxis: {
                    categories: ['Alexander', 'Marie', 'Maximilian', 'Sophia', 'Lukas', 'Maria', 'Leon', 'Anna', 'Tim', 'Laura']
                },

                yAxis: {
                    categories: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
                    title: null
                },

                colorAxis: {
                    min: 0,
                    minColor: '#FFFFFF',
                    maxColor: '#FFFFFF'
                },

                legend: {
                    align: 'right',
                    layout: 'vertical',
                    margin: 0,
                    verticalAlign: 'top',
                    y: 25,
                    symbolHeight: 280
                },

                tooltip: {
                    formatter: function () {
                        return '<b>' + this.series.xAxis.categories[this.point.x] + '</b> sold <br><b>' +
                            this.point.value + '</b> items on <br><b>' + this.series.yAxis.categories[this.point.y] + '</b>';
                    }
                },

                series: [{
                    name: 'Sales per employee',
                    borderWidth: 1,
                    data: [[0, 0, 10], [0, 1, 19], [0, 2, 8], [0, 3, 24], [0, 4, 67], [1, 0, 92], [1, 1, 58], [1, 2, 78], [1, 3, 117], [1, 4, 48], [2, 0, 35], [2, 1, 15], [2, 2, 123], [2, 3, 64], [2, 4, 52], [3, 0, 72], [3, 1, 132], [3, 2, 114], [3, 3, 19], [3, 4, 16], [4, 0, 38], [4, 1, 5], [4, 2, 8], [4, 3, 117], [4, 4, 115], [5, 0, 88], [5, 1, 32], [5, 2, 12], [5, 3, 6], [5, 4, 120], [6, 0, 13], [6, 1, 44], [6, 2, 88], [6, 3, 98], [6, 4, 96], [7, 0, 31], [7, 1, 1], [7, 2, 82], [7, 3, 32], [7, 4, 30], [8, 0, 85], [8, 1, 97], [8, 2, 123], [8, 3, 64], [8, 4, 84], [9, 0, 47], [9, 1, 114], [9, 2, 31], [9, 3, 48], [9, 4, 91]],
                    dataLabels: {
                        enabled: true,
                        color: '#000000'
                    }
                }]
            }
        }),
        methods: {}
    };
</script>

但是得到提示

[Vue warn]: Error in mounted hook: "Error: Highcharts error #17: www.highcharts.com/errors/17"

found in

---> <Highcharts>
       <Demo> at src/components/TestLineChart.vue
         <VContent>
           <VApp>
             <Home> at src/components/Home.vue
               <App> at src/App.vue
                 <Root>

https://www.highcharts.com/errors/17
你看它报的错。
你用了 heatmap 类型的图表,需要另外引入 highcharts-more.jsmodules/heatmap.js,参考 README

commented

感谢你热心的回答!是我自己疏忽了,还有一个小小的问题想请教一下,我刚接触vue,在使用webpack的过程中,我经常遇到,我一个components中的xx.vue载入失败后无论如何改动这个xx.vue的内容都会在浏览器中得到提示
PS:此处的Home 为xx.vue的文件名,而我换到另一个文件名在router中导入时就会正常工作
此处的NewHome.vue,只是Home.vue的拷贝
router/index.js前

import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/components/Home';
import Test from '@/components/Test';
Vue.use(Router);

export default new Router({
    routes: [
        {
            path: '/',
            name: 'home',
            component: Home
        },
        {
            path: '/test',
            name: 'test',
            component: Test
        }
    ]
});

router/index.js后

import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/components/NewHome';
import Test from '@/components/Test';
Vue.use(Router);

export default new Router({
    routes: [
        {
            path: '/',
            name: 'home',
            component: Home
        },
        {
            path: '/test',
            name: 'test',
            component: Test
        }
    ]
});

[Vue warn]: Failed to mount component: template or render function not defined.

found in

---> <Home>
       <App> at src/App.vue
         <Root>

是需要清除什么的缓存之类的吗?

没遇到过这个情况,不太清楚