Comments (3)
import { Receiver } from '@ngxs-labs/emitter-plugin';
@State<string>({
name: 'router',
defaults: ''
})
export class RouterState {
private static router: Router;
constructor(router: Router) {
RouterState.router = router;
}
@Receiver({ action: Navigate })
public async static changeRoute(ctx: StateContext<string>, { payload: path }: EmitteAction<Navigate>) {
await RouterState.router.navigate([path]);
ctx.setState(path);
}
}
class Component {
@Emitter(RouterState.changeRoute)
public changeRoute: Emittable<Navigate>;
}
from emitter.
I was able to make it work, thanks @splincode
Observable implementation
@State<string>({
name: 'Router',
defaults: 'YET_TO_ROUTE'
})
export class RouterState {
private static router: Router;
private static ngZone: NgZone;
@Receiver({type: '[Router] Change path'})
static changeRoute({setState}: StateContext<string>, {payload}: EmitterAction<string>): Observable<boolean> {
const navigate = () => RouterState.router.navigate([payload]);
const observable = fromPromise(
RouterState.ngZone.run(navigate) // ngZone workaround https://github.com/angular/angular/issues/25837
)
.pipe(
take(1), // one-shot
share()
);
// this way it fires even if emitted doesn't subscribes
observable.pipe(
filter(navigated => navigated) // only if actually navigated
)
.subscribe(_ => setState(payload));
return observable;
}
constructor(injectedRouter: Router, injectedNgZone: NgZone) {
RouterState.router = injectedRouter;
RouterState.ngZone = injectedNgZone;
}
}
from emitter.
I still would like to know how/if I should use NgxsRouterPlugin
from emitter.
Related Issues (20)
- Good Emitter Hygiene? HOT 5
- Multiple emits from actions$ observable has inconsistent behavior HOT 4
- API 2.0
- Emit action inside an action listener (with ofEmittableXXX) cancel others listeners HOT 4
- Emitter plugin not working properly with the latest NgXS/Store version HOT 4
- Support TypeScript 3.3+
- Support ngxs 3.4.x HOT 3
- SKIPPING OPTIONAL DEPENDENCY
- Emit Action via EmitterService [Feature request] HOT 1
- The id is not given to UMD package. HOT 2
- Support multiple receiver decorators on one static method
- Angular 9 dependency injection issue HOT 3
- error TS2345: Argument of type (boolean,number etc) is not assignable to parameter of type 'void' HOT 4
- Angular 9 (ivy) - ReferenceError: EmitterAction is not defined HOT 3
- EmitterService - Issue Sending Payload HOT 1
- Emitter TESTING Angular 10 Dependency Deprecated
- Angular 15 issue
- Add support to infer receiver payload types HOT 1
- Not workign with the v18.0.0 of the store HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from emitter.