feat($state): make state data inheritance prototypical #2279
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Modify state data inheritance to use prototypical inhertiance rather than Angular's extend method to enable more flexibility in handling state data.
Justification
I'm currently working on a project that implements Material Design via Angular Material. We've implemented a global FAB by attaching information about what the FAB should do to the state definition. For example:
When we arrive at
foo.bar
we need to be able to tell ifdata.primaryAction
is defined as part of thefoo.bar
state definition or if it's inherited. If it's inherited we (maybe) don't want to display the FAB.Risk of breaking change
Any dev who has implemented a test to determine the availability of a data property using
data.hasOwnProperty('foo')
rather than something like'foo' in data
is at risk of having their app stop functioning as they expect.