angular-docs-cn/packages
Alex Rickabaugh 4055150910 feat(compiler): allow selector-less directives as base classes (#31379)
In Angular today, the following pattern works:

```typescript
export class BaseDir {
  constructor(@Inject(ViewContainerRef) protected vcr: ViewContainerRef) {}
}

@Directive({
  selector: '[child]',
})
export class ChildDir extends BaseDir {
  // constructor inherited from BaseDir
}
```

A decorated child class can inherit a constructor from an undecorated base
class, so long as the base class has metadata of its own (for JIT mode).
This pattern works regardless of metadata in AOT.

In Angular Ivy, this pattern does not work: without the @Directive
annotation identifying the base class as a directive, information about its
constructor parameters will not be captured by the Ivy compiler. This is a
result of Ivy's locality principle, which is the basis behind a number of
compilation optimizations.

As a solution, @Directive() without a selector will be interpreted as a
"directive base class" annotation. Such a directive cannot be declared in an
NgModule, but can be inherited from. To implement this, a few changes are
made to the ngc compiler:

* the error for a selector-less directive is now generated when an NgModule
  declaring it is processed, not when the directive itself is processed.
* selector-less directives are not tracked along with other directives in
  the compiler, preventing other errors (like their absence in an NgModule)
  from being generated from them.

PR Close #31379
2019-08-14 12:03:05 -07:00
..
animations build: convert entry_point to label (#30627) 2019-06-11 00:03:11 +00:00
bazel style: fix inline comment typo (#32090) 2019-08-12 07:06:00 -07:00
benchpress build: TypeScript 3.5 upgrade (#31615) 2019-07-25 17:05:23 -07:00
common fix(common): update $locationShim to notify onChange listeners before emitting AngularJS events (#32037) 2019-08-13 14:23:57 -07:00
compiler feat(compiler): allow selector-less directives as base classes (#31379) 2019-08-14 12:03:05 -07:00
compiler-cli feat(compiler): allow selector-less directives as base classes (#31379) 2019-08-14 12:03:05 -07:00
core feat(compiler): allow selector-less directives as base classes (#31379) 2019-08-14 12:03:05 -07:00
docs refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
elements fix(elements): handle falsy initial value (#31604) 2019-07-18 14:26:37 -07:00
examples docs(forms): use a number as input value for formControlName (#30606) 2019-08-13 14:21:25 -07:00
forms feat(forms): formControlName also accepts a number (#30606) 2019-08-13 14:21:25 -07:00
http refactor: fix remaining typescript strict flag failures (#30993) 2019-07-18 14:21:25 -07:00
language-service refactor(language-service): Cleanup TypescriptHost (#32017) 2019-08-14 11:57:48 -07:00
platform-browser fix(ivy): DebugElement.triggerEventHandler not picking up events registered via Renderer2 (#31845) 2019-08-01 10:13:07 -07:00
platform-browser-dynamic build: convert entry_point to label (#30627) 2019-06-11 00:03:11 +00:00
platform-server fix(ivy): DebugElement.triggerEventHandler not picking up events registered via Renderer2 (#31845) 2019-08-01 10:13:07 -07:00
platform-webworker build: TypeScript 3.5 upgrade (#31615) 2019-07-25 17:05:23 -07:00
platform-webworker-dynamic build: convert entry_point to label (#30627) 2019-06-11 00:03:11 +00:00
private/testing test(ivy): add onlyInIvy perf counter expectations (#30339) 2019-05-09 11:22:00 -07:00
router docs(router): rename incorrect class names (#31815) 2019-08-08 12:16:46 -07:00
service-worker build: TypeScript 3.5 upgrade (#31615) 2019-07-25 17:05:23 -07:00
upgrade refactor(upgrade): avoid using static inherited method (#31986) 2019-08-05 10:01:33 -07:00
zone.js release: cut the zone.js-0.10.2 release (#32128) 2019-08-13 16:55:04 -07:00
BUILD.bazel refactor(core): ensure compatibility with typescript strict flag (#30993) 2019-07-18 14:21:25 -07:00
README.md Revert "docs: Remove unneeded file (#18106)" 2017-07-20 16:46:47 -05:00
empty.ts refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
goog.d.ts fix(ivy): use goog.LOCALE for Closure Compiler to define default LOCALE_ID (#31519) 2019-07-16 13:02:10 -04:00
license-banner.txt build: bump year (#27880) 2019-01-11 11:15:59 -08:00
system.d.ts refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
tsconfig-build-no-strict.json refactor(core): ensure compatibility with typescript strict flag (#30993) 2019-07-18 14:21:25 -07:00
tsconfig-build.json refactor(core): ensure compatibility with typescript strict flag (#30993) 2019-07-18 14:21:25 -07:00
tsconfig-test.json refactor: fix typescript strict flag failures in all tests (#30993) 2019-07-18 14:21:26 -07:00
tsconfig.json refactor: fix typescript strict flag failures in all tests (#30993) 2019-07-18 14:21:26 -07:00
types.d.ts build: switch to typescript's es2015 typings (#28570) 2019-02-06 14:17:55 -05:00

README.md

Angular

The sources for this package are in the main Angular repo. Please file issues and pull requests against that repo.

License: MIT