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组件上尝试双向绑定。我相应地更新了我的答案。。。