2017-06-13 9 views
2

いくつかの使用例があるため、Angular2でPrimeNGコンポーネントを拡張する必要があります。プルプルプルーフを検証するには、十分に複雑なのでDataTableを使用することを選択しました。文字通り@Component注釈を貼り付けコピーした後Angular2内でPrimeNgコンポーネントを拡張する

、私が追加しました:この時点で

export class PPDataTable extends DataTable {}

を私は次のエラーを取得する:No provider for DataTable。アノテーションのproviders配列にDataTableを追加すると、私のDataTableの内容は空になります。

したがって、私は、{ provide: DataTable, useValue: PPDataTable }を追加しようとしました。このようなエラーは、TypeError: co.dt.isSorted is not a functionのように発生します。私は新しいクラスにthis.isSortedを記録しようとしましたが、それは存在します。

このような拡張方法を教えてください。

また、PrimeNgコンポーネントのセレクタ名を変更するための解決策があります(何とか折り返します)?

いくつかのより多くの私は、この発見デバッグスタックを見た後に編集

enter image description here

代わりにオブジェクトを直接提供するので、私は、オブジェクトを含む配列を提供していますようだと、これを私の推測では、エラーの原因です。私がソースコードに入り、それをdt[0].isSorted()に変更すれば、それは動作します!

オブジェクトを直接提供するにはどうすればよいですか?

回答

は私が{ provide: DataTable, useExisting: PPDataTable }を提供する場合、それが動作すると思われます。

答えて

5

は私の良き友人を、これを試してみてください:

import { Component, forwardRef } from '@angular/core'; 
import { NG_VALUE_ACCESSOR } from '@angular/forms'; 
import { PrimeNgClassToExtend } from 'path'; 

const DATATABLE_VALUE_ACCESSOR: any = { 
    provide: NG_VALUE_ACCESSOR, 
    useExisting: forwardRef(() => MyClassThatIsExtending), 
    multi: true 
}; 

@Component({ 
    selector: 'my-class-extending', 
    providers: [DATATABLE_VALUE_ACCESSOR], 
    template: `` 
}) 
export class MyClassThatIsExtending extends PrimeNgClassToExtend { 
} 

我々がコントロール値アクセサにngModelにカスタムコントロールを接続するためにNG_VALUE_ACCESSORを使用しています。

this tutorialもお手伝いできます。

+0

私はまだ質問で説明したのと同じTypeErrorを取得しています。 – user1640736

+0

'ExtendingClass'を正しく提供しているかのように感じますが、' @Inject(forwardRef()=> DataTable))public dt:DataTable'を使用するコンポーネントは何らかの理由で 'dt'の関数にアクセスできません。また、拡張機能のメソッドを手作業で上書きしても機能しません。まだ定義されていません。 – user1640736

+0

@ user1640736 'コンストラクタ(@Inject(forwardRef())=> DataTable))dt){}'を試してください。 – SrAxi

関連する問題