2017-08-30 6 views
6

Angularプロジェクト(Angular 4.0.0)で作業しています。抽象クラスのプロパティを最初にコンクリートとしてキャストする必要があるため、ngModelにプロパティをバインドする際に問題がありますそれは実際にプロパティにアクセスするためのクラスです。テンプレート内での角型のキャストタイプ

すなわち、私持っている、これは私がチェックボックスで設定しngModelを経由して2つの結合方法を必要とし、ブールプロパティ「認知」があり、具体的な実装のイベントがありAbstractEventクラス。周りグーグル

Uncaught Error: Template parse errors: Parser Error: Missing expected) at column 8 in [(event as Event).acknowledged]

ではない「として」これは使用しているためかもしれない提案するように見えた:

<input type="checkbox" *ngIf="event.end" [(ngModel)]="(event as Event).acknowledged" 
              [disabled]="(event as Event).acknowledged"> 

は、残念ながら、これは、次のエラーを投げている:

私は現在、私のDOMでこの要素を持っていますテンプレート内で使用するとサポートされますか?私はこれについて確かではありませんが。

また、私はちょうどこれは私が必要とngModelに結合双方向を破るためのテンプレートを駆動する私のtypescriptファイルにそのための関数を記述する方法を動作することはできません。誰もがこの問題を回避または角度テンプレートで型キャストを実行するためにどのような方法がある場合は

正しく私は非常に感謝することでしょう!

答えて

7

Eventは、テンプレート内から参照することはできませんのでことはできません。

は、あなたがそれを利用できる最初にする必要があります( asもテンプレートバインディング式ではサポートされていません):

class MyComponent { 
    EventType = Event; 

が、これは動作するはず

[(ngModel)]="(event as EventType).acknowledged" 

更新

class MyComponent { 
    asEvent(val) : Event { return val; } 

その後、迅速な応答のための

[(ngModel)]="asEvent(event).acknowledged" 
+0

おかげとしてそれを使用するが、私はまだ同じエラーになっているようだ:列に欠落予想される):「不明なエラー:テンプレートの解析エラー: パーサーエラーを[(イベントタイプとしてのイベント).ACKnowledged] " – Plog

+0

私の答えが更新されました。テンプレートにバインドされた関数はかなり頻繁に呼び出されるため、パフォーマンスに顕著な影響を与える可能性があります。私はそれを必要としない場合には使用しないでください。キャストせずにエラーが出ますか? –

+2

ありがとうございました。そして、ああ、パフォーマンスについてあまり心配していません。現在、私の同僚が書いたプロトタイププロジェクトの一種に取り組んでいます。将来、私は鋳造を必要とするこの種のデザインを避けることを試みるでしょう。もう一度ありがとう。 – Plog

関連する問題