Comments (8)
This is working as designed; the trackBy
function is not allowed to change, so cannot originate from a template variable.
from angular.
So i modified my code to actually change trackBy with setInterval, and it still works:
type TestType = {
id: number;
name: string;
};
@Component({
selector: 'app-root',
standalone: true,
template: `
Current trackBy: {{ trackByNonSignal }}
<!-- THIS WORKS -->
@for(item of data; track item[trackByNonSignal]) {
<p>
#{{ item.id }} — {{ item.name }}
</p>
}
<!-- @if(trackBy(); as trackBySignal) {
@for(item of data; track item[trackBySignal]) {
<p>
#{{ item.id }} — {{ item.name }}
</p>
}
} -->
`,
})
export class App {
public data = [
{ id: 123, name: 'test' },
{ id: 456, name: 'test2' },
];
public trackByNonSignal: keyof TestType = 'id';
public trackBy = signal<keyof TestType>('id');
constructor() {
let tick = 0;
setInterval(() => {
this.trackByNonSignal = tick % 2 === 0 ? 'id' : 'name';
tick++;
}, 1000);
}
}
Example on stackblitz updated too. Take a look @JoostK
from angular.
While that doesn't report any errors, it results in unstable identities which for
does not account for.
from angular.
I didn't want to change trackBy dynamically, that's not my initial idea.
Maybe allow devs to put something to trackBy from template-variable, and throw an error when its value changes?
from angular.
We decided not to support referencing template variables because it results in runtime overhead, as it requires dynamic lookup during change detection.
It is unclear to me what you are trying to achieve, if it isn't for changing the value dynamically.
from angular.
I am building universal table, which loads data from server.
Since this table supports different entities with different columns, i must put inside trackBy an existing key from entity.
The only solutions for now:
- use $index, but perforance will go down with table-sorting etc
- use class variable, but cmon, why do i have to make proxy-variable?
Example entity interfaces:
type Entity1 = {id: 123};
type Entity2 = {uuid: 'sdf-sdf-sdf'};
type RepeatableResponse<T> = {
results: T[];
primaryKey: string;
pagination: ...;
}
Pseudocode:
ts:
@Input()
set endpoint(endpoint: string) {
this.apiPath.set(endpoint);
}
public response = toSignal(this.responseObs);
private responseObs = computed<Observable<RepetableResponse<T>>>(() => {
return this.someService.getResults(this.apiPath());
});
html:
@if(response(); as response) {
<table>
<tbody>
@for(result of response.results; trackBy[response.primaryKey]) {
...
}
</tbody>
</table>
}
from angular.
I see. Yes, that would require referencing a component member.
from angular.
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.
from angular.
Related Issues (20)
- docs: code example missing in PercentPipe documentation page HOT 1
- docs: 404 in i18n guide (`$localize` API is missing) HOT 4
- Expected to be in Angular Zone, but it is not HOT 5
- As a developer I want to be warned when I mistakenly use a Signal in a template without calling it HOT 2
- automatic @defer HOT 1
- Unit test fails for Pipes that use an effect and inject ChangeDetectorRef HOT 10
- Invalid ImageKit quality parameter (`NgOptimizedImage` placeholder) HOT 1
- ng-content[select] does not render content in nested @if control blocks HOT 1
- angular.dev : tutorial : (line: 1:24) Cannot find module '@angular/core' or its corresponding type declarations. HOT 3
- Not all API documentation is visible HOT 1
- Effect usage causes undesirable changes in behavior to existing components due to timing HOT 4
- Optionally keeping previous Component non-destroyed while routing to a new Component HOT 3
- Angular DevTool is showing "Angular application not detected". HOT 1
- `ActivatedRoute` doesn't work in angular elements (web component) HOT 6
- docs: add docs on RouteReuseStrategy
- hostDirectives deep input mapping works implicitly and not explicitly HOT 3
- Ancors on page doesn't lead to specific id's HOT 2
- Link leads to Page Not Found
- docs: ng new not easy to find as a learner on angular.dev HOT 3
- bug: Go to definition doesn't work on the second component in a single file HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from angular.