使用angular2的自定义组件

2016-09-28  本文已影响0人  Nico_zhang

为了减少代码的编写,将复用率高的代码组件化,是angular提倡的一种方式。在angular1中,自定义组件还是比较复杂的。但是在angular中,就显得相当简单。

1.自定义组件

创建一个ts文件,以引用ionic2+highcharts为例

import {Component,ElementRef,AfterViewInit,OnDestroy,ViewChild,ContentChild} from '@angular/core';
import * as Highcharts from 'highcharts';//引入hightcharts
import {ApiengineService} from '../../providers/apiengine-service/apiengine-service'   //自定义的调用api接口

@Component({
  selector:'shop-chart',  // 在模版中使用<shop-chart></shop-chart>直接调用
  template: '<div #shopChart></div>',
  providers:[ApiengineService]
})
export class ShopChart implements AfterViewInit, OnDestroy{
  constructor(public apiengine:ApiengineService){}
//调用自定义接口,获取图表参数
  loadData():any{
      return new Promise((resolve,reject)=>{
        this.apiengine.getH("api.assister.shopChartMonth",{}).then(data=>{
            if(data['errno'] === 0){
                resolve(data['data']);
            }
        }).catch((err)=>{
            reject(err)
        })
      })
  }
  @ViewChild("shopChart") public chartEl:ElementRef;
  private _chart: any;
  ngAfterViewInit(){
      this.loadData().then((data)=>{
        let opts: any = data;
        //本应用为webapp,为方便日后对图表的更新,故将hightcharts的主要参数opts通过api方式获取
        if (this.chartEl && this.chartEl.nativeElement) {
            opts.chart.renderTo = this.chartEl.nativeElement;
            this._chart = new Highcharts.Chart(opts);
        }
      });
  }
  ngOnDestroy() {
    this._chart.destroy();
  }
}

通过以上,就可以实现一个自定义的组件<shop-chart>

2. 使用

在需要使用的ts文件中,添加以下代码

import {ShopChart} from '../../shopChart';

在@Component中添加directives

@Component{
  ...
  directives:[ShopChart]
}

再通过@ViewChild方式将组件导入

@ViewChild(ShopChart) shopChart:ShopChart;

最后html部分直接使用

<shop-chart></shop-chart>

3.效果图

做了个demo,请忽略图表


4.遗憾

目前就发现这个方式可以顺利实现在segement下切换展现图表。每次切换时都会调用api,感觉不是很好。目前也是初学angular2,还不能完全理解ViewChild/ViewChildren/ContentChild等的区别和具体使用方法。后续有更好的方法将更新。也希望各位大神能给给出更好的解决方案。感激不尽。

上一篇 下一篇

猜你喜欢

热点阅读