Go to file
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
.circleci feat(bazel): use rbe_autoconfig() and new container. (#29336) 2019-05-09 14:58:34 -07:00
.codefresh ci: remove msys workaround (#30510) 2019-05-30 13:33:34 -04:00
.devcontainer build: add recommended config files for VSCode remote development (#30450) 2019-05-20 10:13:53 -07:00
.github ci: add reviewer group for deprecations guide (#30722) 2019-05-30 20:45:58 -07:00
.vscode build: add recommended config files for VSCode remote development (#30450) 2019-05-20 10:13:53 -07:00
aio fix(bazel): do not modify tsconfig.json (#30877) 2019-06-11 14:23:00 -07:00
docs docs(ivy): improve debug documentation (#30562) 2019-05-30 13:39:44 -04:00
integration fix(bazel): do not modify tsconfig.json (#30877) 2019-06-11 14:23:00 -07:00
modules build: convert entry_point to label (#30627) 2019-06-11 00:03:11 +00:00
packages fix(ivy): unable to bind to implicit receiver in embedded views (#30897) 2019-06-11 14:29:42 -07:00
scripts build: unable to run build-packages-dist script on windows (#30853) 2019-06-05 09:05:28 -07:00
third_party feat(bazel): use rbe_autoconfig() and new container. (#29336) 2019-05-09 14:58:34 -07:00
tools refactor(ivy): fix type of factory functions to allow explicit types (#30855) 2019-06-11 14:27:17 -07:00
.bazelignore build(bazel): update to nodejs rules 0.30.1 & bazel 0.26.0 (#30627) 2019-06-11 00:03:11 +00:00
.bazelrc build(bazel): update to nodejs rules 0.31.1 (#30627) 2019-06-11 00:03:11 +00:00
.clang-format feat(tooling): Add a .clang-format for automated JavaScript formatting. 2015-04-02 08:44:34 -07:00
.editorconfig build: use https link to editorconfig.org in .editorconfig (#27664) 2018-12-18 09:30:09 -08:00
.gitattributes test: fix ts api guardian and public guard tests on windows (#30105) 2019-04-26 16:32:22 -07:00
.gitignore build: add recommended config files for VSCode remote development (#30450) 2019-05-20 10:13:53 -07:00
.mailmap build: add a Git .mailmap with my new name (#19550) 2017-10-09 14:35:30 -07:00
.nvmrc build: update .nvmrc file to correct node version (#25992) 2018-09-18 13:11:58 -07:00
BUILD.bazel build: Remove cc_binary dependency on brotli (#29912) 2019-04-17 17:20:16 -07:00
CHANGELOG.md release: cut the v8.1.0-next.1 release 2019-06-05 12:27:26 -07:00
CODE_OF_CONDUCT.md docs: fix community tab in GitHub by copying CoC 2018-02-27 19:02:30 -08:00
CONTRIBUTING.md build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00
LICENSE build: bump year (#27880) 2019-01-11 11:15:59 -08:00
README.md docs: fix `quickstart` link in readme (#30807) 2019-06-03 11:43:58 -07:00
WORKSPACE build: set symlink_node_modules = False for yarn_install in main WORKSPACE and bazel schematics (#30627) 2019-06-11 00:03:11 +00:00
browser-providers.conf.js ci: lock chrome and firefox versions for saucelabs (#29529) 2019-03-27 12:38:13 -07:00
browser_repositories.bzl build(bazel): update to latest stable chromium 74 on osx and linux for karma under bazel (#30502) 2019-05-16 14:38:14 -07:00
gulpfile.js refactor: remove extra line break in gulpfile (#29489) 2019-03-25 09:22:37 -07:00
karma-js.conf.js build: rules_nodejs 0.26.0 & use @npm instead of @ngdeps now that downstream angular build uses angular bundles (#28871) 2019-02-28 12:06:36 -08:00
package.json build: update to Bazel 0.26.1 (#30627) 2019-06-11 00:03:11 +00:00
protractor-perf.conf.js fixup! test(ivy): make the test run with benchpress (#30449) 2019-05-16 20:04:04 -07:00
renovate.json ci: update packageFiles to be renovated (#29071) 2019-03-05 09:43:23 -08:00
shims_for_IE.js Revert "refactor: add license header to JS files & format files (#12035)" 2016-10-04 14:06:41 -07:00
test-events.js fix(platform-browser): run BLACK_LISTED_EVENTS outside of ngZone (#18993) 2017-09-05 15:33:22 -05:00
test-main.js build: add render3 entry-point to legacy test systemjs config (#29675) 2019-04-04 10:52:11 -07:00
tslint.json refactor: remove toplevel property accesses (#29329) 2019-05-16 12:08:49 -07:00
yarn.lock build: update to Bazel 0.26.1 (#30627) 2019-06-11 00:03:11 +00:00
yarn.lock.readme.md build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00

README.md

CircleCI BrowserStack Status Join the chat at https://gitter.im/angular/angular npm version

Angular

Angular is a development platform for building mobile and desktop web applications using Typescript/JavaScript and other languages.

Quickstart

Get started in 5 minutes.

Changelog

Learn about the latest improvements.

Want to help?

Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues in the hotlist: community-help.