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

Commit

Permalink
feat(routing): add support for dontLeaveOnParamChanges
Browse files Browse the repository at this point in the history
Fixes #1252

Closes #1254
  • Loading branch information
vicb authored and chirayuk committed Aug 14, 2014
1 parent a300adf commit 13f359d
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 6 deletions.
13 changes: 8 additions & 5 deletions lib/routing/routing.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class RouteViewFactory {
name: name,
path: cfg.path,
defaultRoute: cfg.defaultRoute,
dontLeaveOnParamChanges: cfg.dontLeaveOnParamChanges,
enter: (RouteEnterEvent e) {
if (cfg.view != null || cfg.viewHtml != null) {
_enterHandler(e, cfg.view,
Expand Down Expand Up @@ -73,10 +74,11 @@ class RouteViewFactory {
NgRouteCfg ngRoute({String path, String view, String viewHtml,
Map<String, NgRouteCfg> mount, modules(), bool defaultRoute: false,
RoutePreEnterEventHandler preEnter, RouteEnterEventHandler enter,
RoutePreLeaveEventHandler preLeave, RouteLeaveEventHandler leave}) =>
RoutePreLeaveEventHandler preLeave, RouteLeaveEventHandler leave,
dontLeaveOnParamChanges: false}) =>
new NgRouteCfg(path: path, view: view, viewHtml: viewHtml, mount: mount,
modules: modules, defaultRoute: defaultRoute, preEnter: preEnter,
preLeave: preLeave, enter: enter, leave: leave);
modules: modules, defaultRoute: defaultRoute, preEnter: preEnter, preLeave: preLeave,
enter: enter, leave: leave, dontLeaveOnParamChanges: dontLeaveOnParamChanges);

class NgRouteCfg {
final String path;
Expand All @@ -85,13 +87,14 @@ class NgRouteCfg {
final Map<String, NgRouteCfg> mount;
final Function modules;
final bool defaultRoute;
final bool dontLeaveOnParamChanges;
final RouteEnterEventHandler enter;
final RoutePreEnterEventHandler preEnter;
final RoutePreLeaveEventHandler preLeave;
final RouteLeaveEventHandler leave;

NgRouteCfg({this.view, this.viewHtml, this.path, this.mount, this.modules,
this.defaultRoute, this.enter, this.preEnter, this.preLeave, this.leave});
NgRouteCfg({this.view, this.viewHtml, this.path, this.mount, this.modules, this.defaultRoute,
this.enter, this.preEnter, this.preLeave, this.leave, this.dontLeaveOnParamChanges});
}

/**
Expand Down
26 changes: 25 additions & 1 deletion test/routing/routing_spec.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,31 @@ main() {
_ = injector.get(TestBed);
}

it('should configure route dontLeaveOnParameterChanges parameter', async(() {
initRouter((Router router, RouteViewFactory views) {
views.configure({
'foo': ngRoute(path: r'/foo/:param')
});
// default value should be false
expect(router.findRoute('foo').dontLeaveOnParamChanges).toEqual(false);
});


initRouter((Router router, RouteViewFactory views) {
views.configure({
'foo': ngRoute(path: r'/foo/:param', dontLeaveOnParamChanges: false)
});
expect(router.findRoute('foo').dontLeaveOnParamChanges).toEqual(false);
});

initRouter((Router router, RouteViewFactory views) {
views.configure({
'foo': ngRoute(path: r'/foo/:param', dontLeaveOnParamChanges: true)
});
expect(router.findRoute('foo').dontLeaveOnParamChanges).toEqual(true);
});
}));

it('should configure route hierarchy from provided config', async(() {
var counters = {
'foo': 0,
Expand Down Expand Up @@ -127,7 +152,6 @@ main() {


it('should set the default route', async(() {
int enterCount = 0;
initRouter((Router router, RouteViewFactory views) {
views.configure({
'foo': ngRoute(path: '/foo'),
Expand Down

0 comments on commit 13f359d

Please sign in to comment.