Wykorzystanie rur wewnątrz ngModel na elementach wejściowych w kątowych
Mam pole wprowadzania HTML.
<input [(ngModel)]="item.value" name="inputField" type="text" />
I chcę sformatować jego wartość i użyć istniejącego potoku:
.... [(ngModel)]="item.value | useMyPipeToFormatThatValue" .....
I otrzymamy komunikat o błędzie:
Nie można mieć rury w wyrażeniu akcji
Jak mogę używać rur w tym kontekście?
5 answers
Nie można używać operatorów wyrażenia szablonowego (pipe, save navigator) w instrukcji szablonu:
(ngModelChange)="Template statements"
(ngModelChange)= " item.value / useMyPipeToFormatThatValue= $ event "
Https://angular.io/guide/template-syntax#template-statements
Podobnie jak wyrażenia szablonowe, wyrażenia szablonowe używają języka, który wygląda jak JavaScript. Parser instrukcji szablonu różni się od parser wyrażeń szablonowych, a konkretnie obsługuje zarówno podstawowe assignment ( = ) i wyrażenia łańcuchowe (with; or,).
Jednak niektóre składnie JavaScript nie są dozwolone:
- nowy
- operatory increment i decrement, ++ i --
- przypisanie operatorów, np. + = I - =
- operatory bitowe / i &
- operatory wyrażenia szablonowego
Więc powinieneś napisać to w następujący sposób:
<input [ngModel]="item.value | useMyPipeToFormatThatValue"
(ngModelChange)="item.value=$event" name="inputField" type="text" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-08 11:09:12
<input [ngModel]="item.value | useMyPipeToFormatThatValue"
(ngModelChange)="item.value=$event" name="inputField" type="text" />
Rozwiązaniem jest podział wiązania na Wiązanie jednokierunkowe i Wiązanie zdarzeń - które w rzeczywistości obejmuje składnia [(ngModel)]
. {[2] } jest składnią wiązania jednokierunkowego, a {[3] } jest składnią wiązania zdarzeń. Gdy używane są razem - [()]
Angular rozpoznaje to jako skrót i łączy dwukierunkowe powiązanie w postaci jednokierunkowego powiązania i powiązania zdarzeń z wartością obiektu komponentu.
Powodem, dla którego nie można używać [()]
z rurą jest to, że rury działają tylko z wiązaniami jednokierunkowymi. Dlatego musisz rozdzielić rurę, aby działać tylko na wiązaniu jednokierunkowym i obsługiwać zdarzenie osobno.
Zobacz składnię szablonu Aby uzyskać więcej informacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-06 20:54:54
Próbowałem powyższych rozwiązań, ale wartość, która trafia do modelu, była sformatowana, a następnie zwracana i dawała mi błędy currencyPipe. Więc musiałem
[ngModel]="transfer.amount | currency:'USD':true"
(blur)="addToAmount($event.target.value)"
(keypress)="validateOnlyNumbers($event)"
I na funkcji addToAmount - > zmiana na rozmycie powoduje, że ngModelChange sprawiało mi problemy z kursorem.
removeCurrencyPipeFormat(formatedNumber){
return formatedNumber.replace(/[$,]/g,"")
}
I usunięcie innych wartości nieliczbowych.
validateOnlyNumbers(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[0-9]|\./;
if( !regex.test(key) ) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-25 19:14:06
<input [ngModel]="item.value | currency" (ngModelChange)="item.value=$event"
name="name" type="text" />
Chciałbym dodać jeszcze jeden punkt do zaakceptowanej odpowiedzi.
Jeśli typem kontrolki wejściowej nie jest tekst, rura nie będzie działać.
Pamiętaj o tym i oszczędzaj swój czas.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 11:55:00
Moje rozwiązanie jest podane poniżej searchDetail jest obiektem..
<p-calendar [ngModel]="searchDetail.queryDate | date:'MM/dd/yyyy'" (ngModelChange)="searchDetail.queryDate=$event" [showIcon]="true" required name="queryDate" placeholder="Enter the Query Date"></p-calendar>
<input id="float-input" type="text" size="30" pInputText [ngModel]="searchDetail.systems | json" (ngModelChange)="searchDetail.systems=$event" required='true' name="systems"
placeholder="Enter the Systems">
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 09:54:42