Angular2未检测到对象值的更改
基本上,我在父组件上有两个组件,我有一个对象Angular2未检测到对象值的更改,angular,angular2-directives,angular2-forms,Angular,Angular2 Directives,Angular2 Forms,基本上,我在父组件上有两个组件,我有一个对象 this.data = { startDate : '2016-01-01' }; 然后我有一个日期选择器组件,我将其传递给data.startDate 但是,当日期选择器组件更改值时,它不会反映在父组件对象中 但是,如果我在数据中传递整个对象,然后更新子组件中的值data.startDate,则会在父组件中反映出来。理想情况下,我不想使用订阅和发出事件,因为我希望保持日期选择器代码非常通用,以便在应用程序中重用 有什么想法吗 父参考 儿童班
this.data = { startDate : '2016-01-01' };
然后我有一个日期选择器组件,我将其传递给data.startDate
但是,当日期选择器组件更改值时,它不会反映在父组件对象中
但是,如果我在数据中传递整个对象,然后更新子组件中的值data.startDate,则会在父组件中反映出来。理想情况下,我不想使用订阅和发出事件,因为我希望保持日期选择器代码非常通用,以便在应用程序中重用
有什么想法吗
父参考
儿童班
@Component({
moduleId: module.id,
selector: 'date-time',
templateUrl: './dateTime.component.html',
styleUrls: ['./dateTime.component.css'],
directives: [FORM_DIRECTIVES, CORE_DIRECTIVES],
providers: []
})
export class DateTimeComponent {
@Input()
dateTimeModel:any;
constructor () {}
}
子模板
<div class="dateTimeInput">
<label htmlFor="date-1" >Date</label>
<input type="date" id="date-1" [(ngModel)]="dateTimeModel" />
</div>
日期
Angular2从引用而不是对象属性检测更新。这是变更检测的默认行为
如果要提供自定义检测,可以查看keyvaluedifference
(对象)和IterableDiffer
(数组)类
见相应代码:
编辑
如果您想为DateTimeComponent
利用双向绑定,则需要使用@Output
:
@Component({
moduleId: module.id,
selector: 'date-time',
templateUrl: './dateTime.component.html',
styleUrls: ['./dateTime.component.css'],
directives: [FORM_DIRECTIVES, CORE_DIRECTIVES],
providers: []
})
export class DateTimeComponent {
@Input()
dateTimeModel:any;
@Output()
dateTimeModelChange:EventEmitter<any> = new EventEmitter();
constructor () {}
onDateUpdated(val) {
this.dateTimeModelChange.emit(val);
}
}
@组件({
moduleId:module.id,
选择器:“日期时间”,
templateUrl:“./dateTime.component.html”,
样式URL:['./dateTime.component.css'],
指令:[形式指令,核心指令],
提供者:[]
})
导出类DateTimeComponent{
@输入()
日期时间模型:任意;
@输出()
dateTimeModelChange:EventEmitter=新的EventEmitter();
构造函数(){}
onDateUpdated(val){
这个.dateTimeModelChange.emit(val);
}
}
在组件模板中:
<div class="dateTimeInput">
<label htmlFor="date-1" >Date</label>
<input type="date" id="date-1" [ngModel]="dateTimeModel" (ngModelChange)="onDateUpdated($event)" />
</div>
日期
在父级中,可以这样使用它:
<date-time [(dateTimeModel)]="data.startDate"></date-time>
你能展示一下你绑定数据的模板吗?startDate?啊,我希望它能简单一些。我会看一看,我也更新了一点更详细的问题我没有正确理解你的问题。我认为您可以在dateTime组件上尝试双向绑定。我相应地更新了我的答案。。。