18

Angular2 Dart Angular for Dart Cheat Sheet (v2.0.0-beta.2)で、Elvis オペレーターがサポートされていることがわかります。

コンポーネント ビューで使用しようとしていますが、ここでは許可されていないようです。

与えられた

.html

  <div
    <label
        for = "first">First<span class = "require">*</span></label>
    <input
        type = "text"
        [(ngModel)] = "name?.first"
        id = "first">

ダーツ

...
Name name = new Name();
...

アプリケーションを実行すると、次のエラーが発生します。

エラートレース

Transform TemplateCompiler on 
epimss_ng2_reg|lib/components/name_component.ng_meta.json threw error: Template parse errors:
Parser Error: The '?.' operator cannot be used in the assignment at column 13 in [name?.first=$event] in NameComponent@39:12 ("
        <input
            type = "text"
            [ERROR ->][(ngModel)] = "name?.first"
            #firstCtrl = "ngForm"
            [ngFormControl] = "nameForm"): NameComponent@39:12

コンポーネントのビューで演算子を使用できるのはどのような状況ですか?

乾杯

4

4 に答える 4

53

エラーメッセージが示すように、割り当てには使用できません。nameが nullの場合、値をどこに割り当てる必要がありますか? 短い形式をより明示的な形式に分割する場合

[ngModel]="name?.first" (ngModelChange)="name.first=$event"

その後、elvis 演算子を使用できます。

于 2016-02-02T19:30:17.383 に答える
0

*ngIf を使用できますが、失敗する場合があります。

<input type="text" *ngIf="name" [(ngModel)]="name.first">

テキストエリアのデータを [value] または [ngModel] でバインド: 入力の場合:

<input type="text" (change)="dosomething($event.target.value)" [value]="!noHero ? (hero?.name) : ''">
<input type="text" (change)="dosomething($event.target.value)" [ngModel]="!noHero ? (hero?.name) : ''">
<input type="text" (change)="hero.name=$event.target.value" [ngModel]="hero?name">

テキストエリアについても同様です:

<textarea (change)="dosomething($event.target.value)" [value]="!noHero ? (hero?.name) : ''"></textarea>
<textarea (change)="dosomething($event.target.value)" [ngModel]="!noHero ? (hero?.name) : ''"></textarea>
<textarea (change)="hero.name=$event.target.value" [ngModel]="hero?name"></textarea>

例: https://stackblitz.com/edit/angular-tbptuy

于 2020-02-11T10:49:42.620 に答える