Components: feature(select): trackByFn

Created on 10 Sep 2017  路  3Comments  路  Source: angular/components

Bug, feature request, or proposal:

Feature request

What is the expected behavior?

If you change the datasource used to generate the options, the selected value should be kept. It already works like this for primitive options' values. For complex options' values, something like *ngFor's trackByFunction could take care of which attribute would define whether one of the new options is equals to the one already selected.

What is the current behavior?

When the options' values are not primitive types and you change the options' datasource, the selected value is unset even if it's present in the new datasource.

What are the steps to reproduce?

Plunk: https://plnkr.co/edit/GJn833kKV1qaMthxDmMe?p=preview

In the plunk, select an option and then click on the reload datasource button. The selected value will not be kept.

What is the use-case or motivation for changing an existing behavior?

It would simplify the developer's code if something like trackBy="'id'" or trackBy="'owner.personalDocuments.socialSecurityNumber'" was possible to do.

Most helpful comment

That's what compareWith is for:

<md-select [compareWith]="compareFn">
  ...
</md-select>

compareFn: ((f1: any, f2: any) => boolean) | null = this.compareByValue;

compareByValue(f1: any, f2: any) { 
  return f1 && f2 && f1.value === f2.value; 
}

Check this working here

All 3 comments

That's what compareWith is for:

<md-select [compareWith]="compareFn">
  ...
</md-select>

compareFn: ((f1: any, f2: any) => boolean) | null = this.compareByValue;

compareByValue(f1: any, f2: any) { 
  return f1 && f2 && f1.value === f2.value; 
}

Check this working here

Oh, in this case... closing this issue. Thanks.

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

_This action has been performed automatically by a bot._

Was this page helpful?
0 / 5 - 0 ratings