扩展angular2组件装饰器

时间:2016-03-30 10:24:11

标签: angular

使用角度2.0.0-beta.8,我创建了一些扩展@Component装饰器的自定义装饰器。

要使我使用此代码:

import {..., View } from 'angular2/core';

...

export var MyCustomComponent:ComponentFactory =
    <ComponentFactory>makeDecorator(MyCustomComponentMetadata, (fn:any) => fn.View = View);

现在,凭借角度2.0.0-beta.12,&#39; View&#39;装饰器已被删除,因此导入会抛出错误,因为&#39; angular2 / core&#39;没有导出的成员&#39;查看&#39;。

我应该如何创建自定义组件装饰器?

2 个答案:

答案 0 :(得分:4)

你可以做到

        private void showgridkirimulang()
        {
            con.Close();
            con.Open();
            MySqlCommand cmd = new MySqlCommand("SELECT NamaPasien, RiwayatPenyakit, AlamatPasien, UmurPasien, Jeniskelamin, NoHP, JmlKirimK, StatusDiabetes FROM datapasien WHERE JmlKirimK=1 AND StatusDiabetes='Ya'", con);
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            cmd.ExecuteNonQuery();

            if (ds.Tables[0].Rows.Count > 0)
            {
                gridkirimulang.DataSource = ds.Tables[0];
                gridkirimulang.Columns[0].HeaderText = "Nama Pasien";
                gridkirimulang.Columns[1].HeaderText = "Riwayat Penyakit";
                gridkirimulang.Columns[2].HeaderText = "Alamat Pasien";
                gridkirimulang.Columns[3].HeaderText = "Umur Pasien";
                gridkirimulang.Columns[4].HeaderText = "Jenis Kelamin";
                gridkirimulang.Columns[5].HeaderText = "No. HP";
                gridkirimulang.Columns[6].HeaderText = "Jumlah Pesan Terkirim";
                gridkirimulang.Columns[7].HeaderText = "Status Diabetes";
                gridkirimulang.MasterGridViewTemplate.BestFitColumns();
            }
            con.Close();
        }

答案 1 :(得分:1)

Angular 6不再使用反射来定义组件的元数据。要覆盖内置的组件装饰器,您可以执行以下操作,

import { Component } from '@angular/core';
import componentRegistry from './ComponentRegistry';
 
function MyComponent(args: any = {}): (cls: any) => any {
  const ngCompDecorator = Component(args);
 
  return function (compType: any) {
    ngCompDecorator(compType);
    args.type && componentRegistry.register(args.type, compType, args.model);
  }
}
 
export default MyComponent;

它们的元数据存储在组件的构造函数中的静态属性__annotations__中。要了解更多信息,请检查here