angular/packages/core/test
Paul Gschwendtner 58be2ff884 fix(ivy): unable to bind to implicit receiver in embedded views (#30897)
To provide some context: The implicit receiver is part of the
parsed Angular template AST. Any property reads in bindings,
interpolations etc. read from a given object (usually the component
instance). In that case there is an _implicit_ receiver which can also
be specified explicitly by just using `this`.

e.g.

```html
<ng-template>{{this.myProperty}}</ng-template>
```

This works as expected in Ivy and View Engine, but breaks in case the
implicit receiver is not used for property reads. For example:

```html
<my-dir [myFn]="greetFn.bind(this)"></my-dir>
```

In that case the `this` will not be properly translated into the generated
template function code because the Ivy compiler currently always treats
the `ctx` variable as the implicit receiver. This is **not correct** and breaks
compatibility with View Engine. Rather we need to ensure that we retrieve
the root context for the standalone implicit receiver similar to how it works
for property reads (as seen in the example above with `this.myProperty`)

Note that this requires some small changes to the `expression_converter`
because we only want to generate the `eenextContent()` instruction if the
implicit receiver is _actually_ used/needed. View Engine determines if that is the case by recursively walking through the converted output AST and
checking for usages of the `o.variable('_co')` variable ([see here][ve_check]). This would work too for Ivy, but involves most likely more code duplication
since templates are isolated in different functions and it another pass
through the output AST for every template expression.

[ve_check]: 0d6c9d36a1/packages/compiler/src/view_compiler/view_compiler.ts (L206-L208)

Resolves FW-1366.

PR Close #30897
2019-06-11 14:29:42 -07:00
..
acceptance fix(ivy): unable to bind to implicit receiver in embedded views (#30897) 2019-06-11 14:29:42 -07:00
animation test(core): update core tests (unrelated to queries) to use static flag (#30626) 2019-05-23 10:31:32 -07:00
bundling feat(ivy): require 'token' for ngInjectableDef (#30855) 2019-06-11 14:27:16 -07:00
change_detection build: extract interface and util sub compilation from core (#28028) 2019-01-10 16:31:44 -08:00
debug fix(ivy): DebugNode.attributes not preserving attribute name casing (#30864) 2019-06-06 13:47:16 -07:00
di fix(ivy): call factory functions with correct type for derived classes (#30855) 2019-06-11 14:27:17 -07:00
dom fix(platform-server): add styles to elements correctly (#22527) 2018-03-14 14:12:31 -07:00
linker feat(ivy): require 'token' for ngInjectableDef (#30855) 2019-06-11 14:27:16 -07:00
metadata test(core): update query-specific tests in core (#30626) 2019-05-23 10:31:32 -07:00
reflection refactor(core): clean up support for ES2015 constructor delegation (#30368) 2019-05-10 09:17:20 -07:00
render3 refactor(ivy): fix type of factory functions to allow explicit types (#30855) 2019-06-11 14:27:17 -07:00
sanitization refactor(ivy): Move instructions back to ɵɵ (#30546) 2019-05-20 16:37:47 -07:00
strict_types refactor(ivy): Move instructions back to ɵɵ (#30546) 2019-05-20 16:37:47 -07:00
testability build: update zone.js to 0.9.0 (#28219) 2019-03-26 12:50:38 -07:00
util refactor(ivy): remove duplicated flatten util (#29547) 2019-03-27 12:36:23 -07:00
view feat(ivy): require 'token' for ngInjectableDef (#30855) 2019-06-11 14:27:16 -07:00
zone build: extract interface and util sub compilation from core (#28028) 2019-01-10 16:31:44 -08:00
application_init_spec.ts fix(ivy): Enable AoT tests to run on CI; disable failing tests (#26975) 2018-11-07 10:35:20 -08:00
application_module_spec.ts build(core): remove main() from specs (#21053) 2017-12-22 13:10:51 -08:00
application_ref_integration_spec.ts test(ivy): finish root cause analysis for @angular/core TestBed failing tests (#27510) 2018-12-06 13:41:02 -08:00
application_ref_spec.ts feat(ivy): use i18n locale data to determine the plural form of ICU expressions (#29249) 2019-05-30 15:09:02 -04:00
BUILD.bazel feat(ivy): use i18n locale data to determine the plural form of ICU expressions (#29249) 2019-05-30 15:09:02 -04:00
component_fixture_spec.ts test(ivy): update root causes for @angular/core TestBed failures (#27370) 2018-11-30 13:41:21 -08:00
dev_mode_spec.ts build(core): remove main() from specs (#21053) 2017-12-22 13:10:51 -08:00
directive_lifecycle_integration_spec.ts test(ivy): update root causes for @angular/core TestBed failures (#27419) 2018-12-03 08:19:56 -08:00
error_handler_spec.ts refactor(ivy): refactor more files in DI to prepare it for bazel packages (#28098) 2019-01-14 09:55:30 -08:00
event_emitter_spec.ts fix(core): fix proper propagation of subscriptions in EventEmitter (#22016) 2018-02-06 07:56:33 -08:00
fake_async_spec.ts fix(ivy): update token used for fakeAsync test (#28383) 2019-01-29 16:39:14 -08:00
forward_ref_integration_spec.ts build: update to rules_typescript 0.25.1 (#28625) 2019-02-21 07:46:21 -08:00
spies.ts build: fix file paths after moving modules/@angular/* to packages/* 2017-03-08 16:29:28 -08:00
test_bed_async_spec.ts fix(ivy): stub TestBed.compileComponents implementation (#26506) 2018-10-17 13:08:14 -07:00
test_bed_spec.ts feat(ivy): TestBed support for reusing non-exported components (#30578) 2019-05-24 14:01:44 -04:00
testing_internal_spec.ts build: update to rules_typescript 0.25.1 (#28625) 2019-02-21 07:46:21 -08:00
util_spec.ts build: extract interface and util sub compilation from core (#28028) 2019-01-10 16:31:44 -08:00