diff --git a/lib/routing/routing.dart b/lib/routing/routing.dart index 91a57c0b5..116d20c2c 100644 --- a/lib/routing/routing.dart +++ b/lib/routing/routing.dart @@ -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, @@ -73,10 +74,11 @@ class RouteViewFactory { NgRouteCfg ngRoute({String path, String view, String viewHtml, Map 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; @@ -85,13 +87,14 @@ class NgRouteCfg { final Map 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}); } /** diff --git a/test/routing/routing_spec.dart b/test/routing/routing_spec.dart index 8bb3c9538..d0b8af223 100644 --- a/test/routing/routing_spec.dart +++ b/test/routing/routing_spec.dart @@ -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, @@ -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'),