import 'zone.js'; import 'reflect-metadata'; import { Component, enableProdMode, NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { ViserModule } from 'viser-ng'; const DataSet = require('@antv/data-set'); const sourceData = [ { action: '浏览网站', pv: 50000 }, { action: '放入购物车', pv: 35000 }, { action: '生成订单', pv: 25000 }, { action: '支付订单', pv: 15000 }, { action: '完成交易', pv: 8000 }, ]; const dv = new DataSet.View().source(sourceData); dv.transform({ type: 'map', callback: (obj) => { obj.range = [obj.low, obj.q1, obj.median, obj.q3, obj.high]; return obj; }, }); const data = dv.rows; const scale = [{ dataKey: 'percent', nice: false, }]; const tooltipOpts = { showTitle: false, itemTpl: '
  • ' + '' + '{name}
    ' + '浏览人数:{pv}
    ' + '占比:{percent}
    ' + '
  • ' }; const funnelOpts = { shape: 'pyramid', color: ['action', ['#0050B3', '#1890FF', '#40A9FF', '#69C0FF', '#BAE7FF']], position: 'action*pv', label: ['action*pv', (action, pv) => { return action + ' ' + pv; }, { offset: 35, labelLine: { lineWidth: 1, stroke: 'rgba(0, 0, 0, 0.15)' } }], tooltip: ['action*pv*percent', (action, pv, percent) => ({ name: action, percent: Math.floor(percent * 100) + '%', pv: pv, })] }; @Component({ selector: '#mount', template: `
    ` }) class AppComponent { forceFit: boolean = true; height: number = 400; data = data; scale = scale; tooltipOpts = tooltipOpts; funnelOpts = funnelOpts; showTitle = false; } @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, ViserModule ], providers: [], bootstrap: [ AppComponent ] }) export default class AppModule { }