2016-11-07 69 views
0

我有角2自定义的指令,它看起来像:如何从Angular 2中的自定义指令调用方法?

import {Directive} from '@angular/core' 

//import {ChartModel} from '../models/chart.model' 

@Directive({ selector: '[genericCharts]' }) 

export class GenericChartsDirective { 

public KendoInitGenericDonutChart(selector, chartdata, type, field, description, text, legendvisible){ 
     let dataSourceOptions: kendo.data.DataSourceOptions = {}; 
     dataSourceOptions.data = chartdata; 
     let dataSource: kendo.data.DataSource = new kendo.data.DataSource(dataSourceOptions); 

     let chartOptions: kendo.dataviz.ui.ChartOptions = {}; 
     chartOptions.theme = "fiori"; 
     chartOptions.dataSource = dataSource; 

     chartOptions.series = [{ 
      field: field, 
      categoryField: description 
     }]; 

     chartOptions.seriesColors = ["#00B4CC", "#008C9E", "#005F6B", "#C4BEA1", "#D4D0BE", "#F0ECDA", "#FCFAF2"]; 
     chartOptions.seriesClick = this.explodeDonutChartFieldOnClick; 
     chartOptions.chartArea.background = ""; 
     chartOptions.seriesDefaults.type = type; 
     chartOptions.seriesDefaults.labels.visible = true; 
     chartOptions.seriesDefaults.labels.template = kendo.template("#= category#"); 

     chartOptions.tooltip.visible = true; 
     chartOptions.tooltip.template = kendo.template("${ category }: #= kendo.toString(percentage*100, 'n2') + '%'# - ${ kendo.toString(value, 'n0') }"); 
     chartOptions.legend.visible = legendvisible; 
     chartOptions.legend.position = "custom"; 
     chartOptions.legend.offsetX = 200; 
     chartOptions.legend.offsetY = 100; 
     chartOptions.legend.orientation = "vertical"; 
     chartOptions.legend.labels.color = "#222"; 
     chartOptions.legend.labels.template = kendo.template("#= data.text #: #= kendo.toString(percentage*100, 'n2') + '%'# - #= kendo.toString(data.value, '0')#"); 

     $(selector).kendoChart(chartOptions); 

    } 


    public explodeDonutChartFieldOnClick(e){ 
     if(e.dataItem.explode){ 
      e.sender.options.transitions = false; 
      e.dataItem.explode = false; 
     }else{ 
      // Disable animations 
      e.sender.options.transitions = false; 
      // Explode the current slice 
      e.dataItem.explode = true; 
     }  
      e.sender.refresh(); 
    } 



} 

我想打电话给我ChartsComponent内KendoInitGenericDonutChart方法:

import {Component, AfterViewInit, OnDestroy, OnInit, ContentChild} from '@angular/core' 
import {InsaService} from '../services/insa.service' 
import {ChartModel} from '../models/chart.model' 
import {GenericChartsDirective} from './generic-charts' 
//declare var KendoInitGenericDonutChart: any; 

@Component({ 
    templateUrl: 'app/components/charts.component.html' 
}) 
export class ChartsComponent implements OnDestroy, AfterViewInit { 
    private assetCategorySubscription 
    private currAnalysisSubscription; 
    @ContentChild('genericCharts') genericCharts : GenericChartsDirective 

    constructor(private _insaService: InsaService) { 
     this.assetCategorySubscription = this._insaService.AssetCategoryChartEvent.subscribe(assetCategory => this.refreshAssetCategoryChart(assetCategory)); 
     this.currAnalysisSubscription = this._insaService.CurrencyAnalysisChartEvent.subscribe(currAnalysis => this.refreshCurrAnalysisChart(currAnalysis)); 

    } 

    private refreshAssetCategoryChart(assetCategory: ChartModel[]){ 
     this.genericCharts.KendoInitGenericDonutChart("#GenericAssetCategory", assetCategory, "donut", "Value", "Description","ASSET", true); 
    } 

    private refreshCurrAnalysisChart(currAnalysis: ChartModel[]){ 
     this.genericCharts.KendoInitGenericDonutChart("#GenericCurrencyAnalysis", currAnalysis, "donut", "Value", "Description","CURRENCY", true); 
    } 


private onResize(event) { 
    let assetCategoryChart: kendo.dataviz.ui.Chart = $("#GenericAssetCategory").data("kendoChart"); 
    let currencyAnalysisChart: kendo.dataviz.ui.Chart = $("#GenericCurrencyAnalysis").data("kendoChart"); 



} 



    ngAfterViewInit() { 
     this.genericCharts.KendoInitGenericDonutChart("#GenericAssetCategory", this._insaService.chartDataAssetCategory, "donut", "Value", "Description","ASSET", true); 
     this.genericCharts.KendoInitGenericDonutChart("#GenericCurrencyAnalysis", this._insaService.chartDataCurrAnalysis, "donut", "Value", "Description","CURRENCY", true); 


    } 


    ngOnDestroy(){ 
    this.currAnalysisSubscription.unsubscribe(); 
    this.assetCategorySubscription.unsubscribe(); 
    } 
} 

我包括我的内声明的应用程序模块内部指令。 我得到的错误说:无法读取属性'KendoInitGenericDonutChart'od未定义。 我不知道我在哪里错了,如何从指令中访问方法? 感谢您的建议!

回答

0

尝试更换

@ContentChild('genericCharts') genericCharts : GenericChartsDirective 

随着

@ContentChild('GenericChartsDirective') genericCharts : GenericChartsDirective 
相关问题