Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

fix($injector): do not use inherited $inject #15538

Closed

Conversation

ChrisMondok
Copy link

@ChrisMondok ChrisMondok commented Dec 21, 2016

Ensure that a function has its own $inject property, and not an inherited
property, when annotating. This ensures that derived functions / classes do not
get the dependencies of their super class.

Fixes #15536

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

Bug fix

What is the current behavior? (You can also link to an open issue here)

#15536

What is the new behavior (if this is a feature change)?

Does this PR introduce a breaking change?

Yes

Please check if the PR fulfills these requirements

Other information:

BREAKING CHANGE:

Prior to this PR, derived classes with no dependencies could extend base classes with dependencies, as long as the derived classes did not have constructors. As of this PR, the derived class would be seen as having no dependencies, and the base class's constructor would be called with no arguments.

@ChrisMondok ChrisMondok force-pushed the do-not-inherit-annotations branch from 3ccd819 to fce42e0 Compare December 21, 2016 17:13
Ensure that a function has its own $inject property, and not an inherited
property, when annotating. This ensures that derived functions / classes do not
get the dependencies of their super class.

Fixes angular#15536
@dcherman
Copy link
Contributor

How would this play with derived classes that do not define their own constructor? Wouldn't that fail as it would reject the use of the parent's dependencies?

https://plnkr.co/edit/v4S9ViiJIaq9jZwFU1jO?p=preview

@ChrisMondok
Copy link
Author

I'm closing this PR: while the issue still exists, it's pretty clear that this (at least, not exactly this), is not the solution.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

$inject with ES6 classes can inject the wrong dependencies
4 participants