Cha*_*les 6 javascript events angular
这是我的代码:
import { Component } from '@angular/core';
import { Validators, FormGroup, FormArray, FormBuilder } from '@angular/forms';
@Component({
selector: 'my-app',
template: `
<div id="my-div">
<h1>Ng2 DateTime Picker French Test</h1>
<input [(ngModel)]="myDate"
(change)="myChange($event)"
(ngModelChange)="myNgModelChange($event)"
ng2-datetime-picker
date-only="true"/>
</div>
`,
styles: [`
div { font-family: Courier; font-size: 13px}
input { min-width: 200px; font-size: 15px; }
`]
})
export class AppComponent {
myDate: any = "2016-12-28";
constructor(private fb: FormBuilder) {
moment.locale('fr-ca');
}
myChange(ev) {
alert("input field is manually changed to", ev.target.value)
}
myNgModelChange(value) {
alert("ngModel is changed to " + value);
}
}
Run Code Online (Sandbox Code Playgroud)
当我加载页面时,它会自动触发 ngModelChange 事件。但是如果我不设置 myDate 值,那么它就不会触发事件。那么如何第一次防止 ngModelChange 呢?这是演示
更新 (2):扩展当前设置以允许多个日期。
myDates = [
{
id: 1, // You can have an undefined value
value: undefined,
},
{
id: 2, // You can set an initial date
value: new Date("Thu Jan 01 2015 00:00:00 GMT-0500 (EST)"),
},
{
id: 3 // You can also leave out the value
}
];
Run Code Online (Sandbox Code Playgroud)
setup() {
this.myDates.forEach((dateObj, i) => {
this.myDates[i].ignored = false;
this.myDates[i].initValue = dateObj.value;
});
}
Run Code Online (Sandbox Code Playgroud)
<div *ngFor="let myDate of myDates; let i = index">
<input
[ngModel]="myDate.value"
(ngModelChange)="myNgModelChange($event, i)"
ng2-datetime-picker
date-format="DD-MM-YYYY hh:mm"
hour="23"
minute='59'
date-only="true"/>
</div>
Run Code Online (Sandbox Code Playgroud)
@Component({
selector: 'my-app',
template: `
<div id="my-div">
<h1>Ng2 DateTime Picker French Test</h1>
<div *ngFor="let myDate of myDates; let i = index">
<input
[ngModel]="myDate.value"
(ngModelChange)="myNgModelChange($event, i)"
ng2-datetime-picker
date-format="DD-MM-YYYY hh:mm"
hour="23"
minute='59'
date-only="true"/>
</div>
</div>
`,
styles: [`
div { font-family: Courier; font-size: 13px}
input { min-width: 200px; font-size: 15px; }
`]
})
export class AppComponent {
myDates = [
{
id: 1, // You can have an undefined value
value: undefined,
},
{
id: 2, // You can set an initial date
value: new Date("Thu Jan 01 2015 00:00:00 GMT-0500 (EST)"),
},
{
id: 3 // You can also leave out the value
}
];
constructor(private fb: FormBuilder) {
moment.locale('fr-ca');
this.setup();
}
setup() {
this.myDates.forEach((dateObj, i) => {
this.myDates[i].ignored = false;
this.myDates[i].initValue = dateObj.value;
});
}
myChange(ev) {
alert("input field is manually changed to", ev.target.value)
}
myNgModelChange(value, index) {
if (this.myDates[index].ignored || this.myDates[index].initValue === undefined) {
alert("ngModel is changed to " + value);
}
this.myDates[index].ignored = true;
}
}
Run Code Online (Sandbox Code Playgroud)
原始更新 (1):允许undefined初始日期值。
当组件加载时存储它的初始值,如下所示:
this.initValue = this.myDate;
Run Code Online (Sandbox Code Playgroud)
myNgModelChange(value) {
if (this.ignoredFirstEvent || this.initValue === undefined) {
alert("ngModel is changed to " + value);
}
this.ignoredFirstEvent = true;
}
Run Code Online (Sandbox Code Playgroud)
@Component({
selector: 'my-app',
template: `
<div id="my-div">
<h1>Ng2 DateTime Picker French Test</h1>
<input [ngModel]="myDate"
(ngModelChange)="myNgModelChange($event)"
ng2-datetime-picker
date-format="DD-MM-YYYY hh:mm"
hour="23"
minute='59'
date-only="true"/>
</div>
`,
styles: [`
div { font-family: Courier; font-size: 13px}
input { min-width: 200px; font-size: 15px; }
`]
})
export class AppComponent {
ignoredFirstEvent = false;
initValue;
myDate:any;
constructor(private fb: FormBuilder) {
moment.locale('fr-ca');
this.initValue = this.myDate;
}
myChange(ev) {
alert("input field is manually changed to", ev.target.value)
}
myNgModelChange(value) {
if (this.ignoredFirstEvent || this.initValue === undefined) {
alert("ngModel is changed to " + value);
}
this.ignoredFirstEvent = true;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8903 次 |
| 最近记录: |