Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit 9f55fbf

Browse files
vicbchirayuk
authored andcommitted
feat(routing): add support for dontLeaveOnParamChanges
Fixes #1252 Closes #1254
1 parent ef3fb7b commit 9f55fbf

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

lib/routing/routing.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class RouteViewFactory {
2929
name: name,
3030
path: cfg.path,
3131
defaultRoute: cfg.defaultRoute,
32+
dontLeaveOnParamChanges: cfg.dontLeaveOnParamChanges,
3233
enter: (RouteEnterEvent e) {
3334
if (cfg.view != null || cfg.viewHtml != null) {
3435
_enterHandler(e, cfg.view,
@@ -73,10 +74,11 @@ class RouteViewFactory {
7374
NgRouteCfg ngRoute({String path, String view, String viewHtml,
7475
Map<String, NgRouteCfg> mount, modules(), bool defaultRoute: false,
7576
RoutePreEnterEventHandler preEnter, RouteEnterEventHandler enter,
76-
RoutePreLeaveEventHandler preLeave, RouteLeaveEventHandler leave}) =>
77+
RoutePreLeaveEventHandler preLeave, RouteLeaveEventHandler leave,
78+
dontLeaveOnParamChanges: false}) =>
7779
new NgRouteCfg(path: path, view: view, viewHtml: viewHtml, mount: mount,
78-
modules: modules, defaultRoute: defaultRoute, preEnter: preEnter,
79-
preLeave: preLeave, enter: enter, leave: leave);
80+
modules: modules, defaultRoute: defaultRoute, preEnter: preEnter, preLeave: preLeave,
81+
enter: enter, leave: leave, dontLeaveOnParamChanges: dontLeaveOnParamChanges);
8082

8183
class NgRouteCfg {
8284
final String path;
@@ -85,13 +87,14 @@ class NgRouteCfg {
8587
final Map<String, NgRouteCfg> mount;
8688
final Function modules;
8789
final bool defaultRoute;
90+
final bool dontLeaveOnParamChanges;
8891
final RouteEnterEventHandler enter;
8992
final RoutePreEnterEventHandler preEnter;
9093
final RoutePreLeaveEventHandler preLeave;
9194
final RouteLeaveEventHandler leave;
9295

93-
NgRouteCfg({this.view, this.viewHtml, this.path, this.mount, this.modules,
94-
this.defaultRoute, this.enter, this.preEnter, this.preLeave, this.leave});
96+
NgRouteCfg({this.view, this.viewHtml, this.path, this.mount, this.modules, this.defaultRoute,
97+
this.enter, this.preEnter, this.preLeave, this.leave, this.dontLeaveOnParamChanges});
9598
}
9699

97100
/**

test/routing/routing_spec.dart

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,31 @@ main() {
5353
_ = injector.get(TestBed);
5454
}
5555

56+
it('should configure route dontLeaveOnParameterChanges parameter', async(() {
57+
initRouter((Router router, RouteViewFactory views) {
58+
views.configure({
59+
'foo': ngRoute(path: r'/foo/:param')
60+
});
61+
// default value should be false
62+
expect(router.findRoute('foo').dontLeaveOnParamChanges).toEqual(false);
63+
});
64+
65+
66+
initRouter((Router router, RouteViewFactory views) {
67+
views.configure({
68+
'foo': ngRoute(path: r'/foo/:param', dontLeaveOnParamChanges: false)
69+
});
70+
expect(router.findRoute('foo').dontLeaveOnParamChanges).toEqual(false);
71+
});
72+
73+
initRouter((Router router, RouteViewFactory views) {
74+
views.configure({
75+
'foo': ngRoute(path: r'/foo/:param', dontLeaveOnParamChanges: true)
76+
});
77+
expect(router.findRoute('foo').dontLeaveOnParamChanges).toEqual(true);
78+
});
79+
}));
80+
5681
it('should configure route hierarchy from provided config', async(() {
5782
var counters = {
5883
'foo': 0,
@@ -127,7 +152,6 @@ main() {
127152

128153

129154
it('should set the default route', async(() {
130-
int enterCount = 0;
131155
initRouter((Router router, RouteViewFactory views) {
132156
views.configure({
133157
'foo': ngRoute(path: '/foo'),

0 commit comments

Comments
 (0)