角度对象变化检测

时间:2017-08-22 08:08:26

标签: angular typescript

我有第三方角度组件,它是显示用户数据的表格。如果传递给表的对象发生更改,表将自行更新。

Angular如何检测对象的更改?我有以下例子:

user.component.ts

@Component({
  selector: 'app-user',
  templateUrl: './user.component.html',
  styleUrls: ['./user.component.css'],
})
export class UserComponent implements OnInit {

  private _users: User[];
  set users(users: User[]) {
    this._users = users;
  }

  get users(): User[] {
    return this._users;
  }

  constructor() {}

  addUserToTheList(user: User) {

    // this won't be detected as a change to the object
    this.users.push(user);

    // on the other hand, this will
    let userList: User[] = this.users;
    userList.push(user);
    this.users = userList;

  }
}

这是否意味着我必须完全替换对象以触发更改检测,或者我在某种程度上完全忽略了这一点?或者它可能是第三方库(Clarity Design System

的问题

1 个答案:

答案 0 :(得分:5)

您正在使用的表组件可能正在实现ChangeDetectionStrategy.OnPush

这意味着组件会将所有输入视为 immutable (意味着它永远不会更改),因此仅在更换输入对象时运行更改检测。 / p>

这是一个解释它的链接:https://angular-2-training-book.rangle.io/handout/change-detection/change_detection_strategy_onpush.html