Angular 角度2:如何在ngOnInit/ngOnChanges期间更改@Input属性值 问题

Angular 角度2:如何在ngOnInit/ngOnChanges期间更改@Input属性值 问题,angular,typescript,Angular,Typescript,我正在创建一个具有2个@Input()属性的组件,它们恰好相互依赖。下面是一个示例(您也可以看到): 使用了语法,这正是预期的使用模式 我可以通过围绕makeDefault调用setTimeout来解决这个问题,如下所示: public ngOnInit(): void { if (!this.defaultValue) { setTimeout(() => { this.makeDefault(this.items[0]); }, 0)

我正在创建一个具有2个
@Input()
属性的组件,它们恰好相互依赖。下面是一个示例(您也可以看到):

使用了语法,这正是预期的使用模式

我可以通过围绕
makeDefault
调用
setTimeout
来解决这个问题,如下所示:

  public ngOnInit(): void {
    if (!this.defaultValue) {
      setTimeout(() => {
        this.makeDefault(this.items[0]);
      }, 0);
    }
  }
但这真是太难看了


处理此类交互模式的正确方法是什么?

要设置默认值,必须使用:

[defaultValue]="default"
不是:

查看更新的文档。我也连接了defaultValueChange事件

评论更新:

此外,使用app类中声明的默认值,而不是在my app模板中初始化“default”,也可以克服此问题:

<my-select [(default)]="defaultItem" ...></my-select>

export class App {
  defaultItem = 'default';
  items = ['item 1', 'item 2', 'item 3'];
  constructor() {
    this.name = 'Angular2'
  }
}

导出类应用程序{
defaultItem='default';
项目=['项目1'、'项目2'、'项目3'];
构造函数(){
this.name='Angular2'
}
}

此处预期会使用“盒子里的香蕉”。我想听听外面的变化。是的,这是问题的一部分,但这是我无法改变的。我会用这个标记更新我的问题。你需要在我的应用程序模板中初始化“默认值”吗?使用App类中声明的默认值也可以解决这个问题。更新了上面的答案。是的,它确实克服了这个问题。我试图使控件抵抗用户错误。用户可能会忘记分配
默认值
或将其分配给无效的对象。因此,在这种情况下,我会自己设置
默认值。但是,双向数据绑定到模板中声明的值是令人不安的。是的:)但坦率地说,我不认为这样的用例是唯一的,所以我想解决这个问题
[defaultValue]="default"
[(defaultValue)]="default"
<my-select [(default)]="defaultItem" ...></my-select>

export class App {
  defaultItem = 'default';
  items = ['item 1', 'item 2', 'item 3'];
  constructor() {
    this.name = 'Angular2'
  }
}