5b32f55a3a
Queries can technically be also accessed within component templates e.g. ```html <my-comp [binding]="myQuery"></my-comp> ``` In that case the query with the property "myQuery" is accessed statically and needs to be marked with `static: true`. There are other edge cases that need to be handled as the template property read doesn't necessarily resolve to the actual query property. For example: ```html <foo #myQuery></foo> <my-comp [binding]="myQuery"></my-comp> ``` In this scenario the binding doesn't refer to the actual query because the template reference variable takes precedence. The query doesn't need to be marked with "static: true" this time. This commit ensures that the `static-query` migration schematic now handles this cases properly. Also template property reads that access queries from within a `<ng-template>` are ignored as these can't access the query before the view has been initialized. Resolves FW-1216 PR Close #29713 |
||
---|---|---|
.. | ||
angular | ||
google3 | ||
BUILD.bazel | ||
README.md | ||
analyze_template.ts | ||
index.ts |
README.md
Assignments to template variables
With Ivy, assignments to template variables are no longer supported as template variables are effectively constants.
This means that assignments to template variables will break your application once Ivy is enabled by default. For example:
<button *ngFor="let option of options"
(click)="option = 'newButtonText'">
{{ option }}
</button>
In the example from above, a value is assigned to the option
template variable on click
. This will ultimately break your
application and therefore the logic needs to be adjusted to not
update the option
variable, but rather the given element in
the options
array:
<button *ngFor="let option of options; let idx = index"
(click)="options[idx] = 'newButtonText'">
{{ option }}
</button>