Vue的剑道图

时间:2019-02-08 08:17:27

标签: vue.js kendo-ui kendo-dataviz

我正在按照以下说明进行操作 https://www.telerik.com/kendo-vue-ui/components/diagram/ 但是我正在运行带有.vue文件的独立Vue应用程序。

首先,它在kendo.dataviz上失败,因为未定义kendo(在visualTemplate函数中)。

我看了看STACKBLITZ中的代码,看来示例代码很急。有点“让我们导入所有内容,不必太担心”。 index.js中的导入也是如此。性能很重要,我不想导入超出我所需的组件。

https://stackblitz.com/edit/jhqgbd?file=index.js

那么,我实际上需要使其在Vue中工作吗?

import Vue from 'vue'
import '@progress/kendo-ui'
import '@progress/kendo-theme-default/dist/all.css'
import { DataSourceInstaller, DiagramInstaller } from '@progress/kendo-diagram-vue-wrapper'

Vue.use(DiagramInstaller);
Vue.use(DataSourceInstaller);

new Vue({
    el: '#vueapp',
    data: function() {
        return {
            diagramModel: {
                children: 'items'
            },
            diagramData: myData
        }
    },
    methods: {
        kendowidgetready: function (widget) {
            widget.bringIntoView(widget.shapes)
        },
        visualTemplate: function (options) {
            var dataviz = kendo.dataviz
            var g = new dataviz.diagram.Group()
            var dataItem = options.dataItem

            g.append(new dataviz.diagram.Rectangle({
                width: 210,
                height: 75,
                stroke: {
                    width: 0
                },
                fill: {
                    gradient: {
                    type: 'linear',
                    stops: [{
                        color: dataItem.colorScheme,
                        offset: 0,
                        opacity: 0.5
                    }, {
                        color: dataItem.colorScheme,
                        offset: 1,
                        opacity: 1
                    }]
                    }
                }
            }))

            g.append(new dataviz.diagram.TextBlock({
                text: dataItem.firstName + ' ' + dataItem.lastName,
                x: 85,
                y: 20,
                fill: '#fff'
            }))

            g.append(new dataviz.diagram.TextBlock({
                text: dataItem.title,
                x: 85,
                y: 40,
                fill: '#fff'
            }))

            g.append(new dataviz.diagram.Image({
                source: 'https://demos.telerik.com/kendo-ui/content/dataviz/diagram/people/' + dataItem.image,
                x: 3,
                y: 3,
                width: 68,
                height: 68
            }))

            return g
        }
    }
})

1 个答案:

答案 0 :(得分:2)

我创建了一个有效的示例here。我发现的唯一问题是DataSourceInstaller中不存在@progress/kendo-diagram-vue-wrapper。我必须从@progress/kendo-datasource-vue-wrapper导入它。

作为diagramData,我从您拥有邮政信息的link中获取了数据。

作为index.html的我也从您的链接中删除了一个,但是做了一些清理。

完整示例

index.js

import Vue from 'vue';
import '@progress/kendo-ui';
import '@progress/kendo-theme-default/dist/all.css';
import { DataSourceInstaller } from '@progress/kendo-datasource-vue-wrapper';
import { DiagramInstaller } from '@progress/kendo-diagram-vue-wrapper';

import diagramData from './data';

Vue.use(DiagramInstaller);
Vue.use(DataSourceInstaller);

new Vue({
  el: '#vueapp',
  data() {
    return {
      diagramModel: {
        children: 'items',
      },
      diagramData,
    }
  },
  methods: {
    kendowidgetready(widget) {
      widget.bringIntoView(widget.shapes);
    },
    visualTemplate(options) {
      var dataviz = kendo.dataviz;
      var g = new dataviz.diagram.Group();
      var dataItem = options.dataItem;

      g.append(new dataviz.diagram.Rectangle({
        width: 210,
        height: 75,
        stroke: {
          width: 0,
        },
        fill: {
          gradient: {
            type: 'linear',
            stops: [{
              color: dataItem.colorScheme,
              offset: 0,
              opacity: 0.5,
            }, {
              color: dataItem.colorScheme,
              offset: 1,
              opacity: 1,
            }],
          },
        },
      }));

      g.append(new dataviz.diagram.TextBlock({
        text: dataItem.firstName + ' ' + dataItem.lastName,
        x: 85,
        y: 20,
        fill: '#fff',
      }));

      g.append(new dataviz.diagram.TextBlock({
        text: dataItem.title,
        x: 85,
        y: 40,
        fill: '#fff',
      }));

      g.append(new dataviz.diagram.Image({
        source: 'https://demos.telerik.com/kendo-ui/content/dataviz/diagram/people/' + dataItem.image,
        x: 3,
        y: 3,
        width: 68,
        height: 68,
      }));

      return g;
    },
  },
});

index.html

<!DOCTYPE html>
<html>

<head>
<title>Kendo UI for Vue Example Application</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>
  <div id="vueapp">
    <kendo-hierarchicaldatasource 
      ref="remoteDataSourceComponent" 
      :data="diagramData" 
      schema-model-children="items">
    </kendo-hierarchicaldatasource>

    <kendo-diagram 
      data-source-ref="remoteDataSourceComponent" 
      layout-type="layered" 
      :shape-defaults-visual="visualTemplate"
      connection-defaults-stroke-color="#979797" 
      :connection-defaults-stroke-width="2" 
      @kendowidgetready="kendowidgetready">
    </kendo-diagram>
  </div>
</body>

</html>

data.js

export default [{
  firstName: 'Antonio',
  lastName: 'Moreno',
  image: 'antonio.jpg',
  title: 'Team Lead',
  colorScheme: '#1696d3',
  items: [{
    firstName: 'Elizabeth',
    image: 'elizabeth.jpg',
    lastName: 'Brown',
    title: 'Design Lead',
    colorScheme: '#ef6944',
    items: [{
      firstName: 'Ann',
      lastName: 'Devon',
      image: 'ann.jpg',
      title: 'UI Designer',
      colorScheme: '#ef6944'
    }]
  }, {
    firstName: 'Diego',
    lastName: 'Roel',
    image: 'diego.jpg',
    title: 'QA Engineer',
    colorScheme: '#ee587b',
    items: [{
      firstName: 'Fran',
      lastName: 'Wilson',
      image: 'fran.jpg',
      title: 'QA Intern',
      colorScheme: '#ee587b'
    }]
  }, {
    firstName: 'Felipe',
    lastName: 'Izquiedro',
    image: 'felipe.jpg',
    title: 'Senior Developer',
    colorScheme: '#75be16',
    items: [{
      firstName: 'Daniel',
      lastName: 'Tonini',
      image: 'daniel.jpg',
      title: 'Developer',
      colorScheme: '#75be16'
    }]
  }]
}]