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

feat(routing): Add support for dontLeaveOnParamChanges #1254

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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