Closed alcroito closed 1 year ago
Can you not simply do transition: Transition
without the @Inject. I didn't think that was necessary
As I mentioned in the original description, I did try variations like that. It fails in the same way when the component is downgraded and used via string based routing.
angular.js:14525 NullInjectorError: R3InjectorError(RootModule)[Transition -> Transition -> Transition]:
NullInjectorError: No provider for Transition!
at NullInjector.get (core.mjs:6359:1)
at R3Injector.get (core.mjs:6786:1)
at R3Injector.get (core.mjs:6786:1)
at R3Injector.get (core.mjs:6786:1)
at ChainedInjector.get (core.mjs:13769:1)
at lookupTokenUsingModuleInjector (core.mjs:3293:1)
at getOrCreateInjectable (core.mjs:3338:1)
at ɵɵdirectiveInject (core.mjs:10871:1)
at NodeInjectorFactory.Ng2Component_Factory [as factory] (ɵfac.js? [sm]:1:1)
at getNodeInjectable (core.mjs:3523:1) '<ng2-component class="ng-scope" ng-version="14.2.5">'
I read the source code, but i couldn't quite figure out which part of hybrid / ui-router / core is supposed to provide the $transition$
/ transition: Transition
object to be injectable.
I'm a little bit confused because Transition refers to the current transition in progress. When the component is loaded the transition is finsihed so it shouldn't exsist. What are you trying to use Transition for?
Is the transition finished by the time the component constructor is called?
The documentation at https://ui-router.github.io/ng1/docs/latest/modules/injectables.html#_stateparams states that when $stateParams is injected into view controllers, it is the current per-transition object, not a finished / successful transition.
Quote
When injected into transition hooks, resolves, or view controllers, the object is the Per-Transition Object with the parameter values for the running Transition.
And the deprecation replacement code suggests injecting it like that into a view controller. And by extension, I hoped the same would work for downgraded ng2 components.
What are you trying to use Transition for?
I'd like to get the transition to get the params() associated with it, because i was under the impression it is not the finished transition, and thus i should get the params from the transition, rather than say UIRouterGlobals.params
When the component is loaded the transition is finsihed so it shouldn't exsist.
Well it certainly exists and is injected when not using the string-based routing.
I don't see any issue with you using StateService.params
(or UIRouterGlobals.params
) .... Also from checking the (angular code) the component gets instantiated when the transition is successful, so you shouldn't have to access or rely on Transition.
In relation to the link you send, there was some problems in AngularJS with relying on $stateParams thats why it's encouraged to move away from it. But you shouldn't have any issues with StateService.params o UIRouterGlobals.params when used inside a uiview Component
I see.
But then at what point is the ongoing transition object available? Only in resolve functions and transition hooks?
I see.
But then at what point is the ongoing transition object available? Only in resolve functions and transition hooks?
Exactly :). Only when a transition is in progress you should look at the transition object
Ok, thank you for your help!
I'm still curious why the $transition$
object is conditionally available in the constructor depending on the component type, but it's not that critical anymore.
Ok, thank you for your help!
I'm still curious why the
$transition$
object is conditionally available in the constructor depending on the component type, but it's not that critical anymore.
No worries, I'm trying to get the example repo running to see If I can have a look but as I said I wouldn't rely on the Transition object being available inside a component constructor.
Take into account that a Transition object only makes sense during a state change/transition and once the Transition is completed it becomes obsolete and any changes to the state would incur in a new Transition object being created.
Hi,
I've encountered an issue where
$transition$
can't be injected into a downgraded ng2 component constructor, when not using any resolve function.The relevant bit of code:
Note that
component
is specified as a string rather than a class name. If I changeto
Injection succeeds. It also succeeds for non-downgraded ng1 components declared via
app.component()
. So the error only seems to affect downgraded ng2 components. I also tried variations liketransition
instead$transition
to no success.The error is
Is this not supported, or am I doing something wrong? I would like to use downgraded ng2 components in the router until i've ported everything to remove the usage of the hybrid router.
Providing full reproducer
main.ts
that can be replaced into theexample/src/main.ts
file of the repo.