Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Unified Diff: third_party/pkg/angular/lib/routing/ng_view.dart

Issue 257423008: Update all Angular libs (run update_all.sh). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/pkg/angular/lib/routing/ng_view.dart
diff --git a/third_party/pkg/angular/lib/routing/ng_view.dart b/third_party/pkg/angular/lib/routing/ng_view.dart
index deb733e57d63e30d9ffa1f8719f8b0ce50c31610..342bb07d996a6276d1419ca161c7dc108793cd2f 100644
--- a/third_party/pkg/angular/lib/routing/ng_view.dart
+++ b/third_party/pkg/angular/lib/routing/ng_view.dart
@@ -9,7 +9,7 @@ part of angular.routing;
* [NgViewDirective] can work with [NgViewDirective] to define nested views
* for hierarchical routes. For example:
*
- * void initRoutes(Router router, ViewFactory view) {
+ * void initRoutes(Router router, RouteViewFactory view) {
* router.root
* ..addRoute(
* name: 'library',
@@ -55,46 +55,52 @@ part of angular.routing;
* <li><a href="/library/23456/overview">Book 23456</a>
* </ul>
*/
-@NgDirective(
+@Decorator(
selector: 'ng-view',
- publishTypes: const [RouteProvider],
- visibility: NgDirective.CHILDREN_VISIBILITY)
-class NgViewDirective implements NgDetachAware, RouteProvider {
- final NgRoutingHelper locationService;
- final BlockCache blockCache;
- final Injector injector;
- final Element element;
- final Scope scope;
+ module: NgView.module,
+ children: Directive.TRANSCLUDE_CHILDREN)
+class NgView implements DetachAware, RouteProvider {
+ static final Module _module = new Module()
+ ..factory(RouteProvider, (i) => i.get(NgView));
+
+ static module() => _module;
+
+ final NgRoutingHelper _locationService;
+ final ViewCache _viewCache;
+ final Injector _injector;
+ final Scope _scope;
RouteHandle _route;
- Block _previousBlock;
- Scope _previousScope;
+ final ViewPort _viewPort;
+
+ View _view;
+ Scope _childScope;
Route _viewRoute;
- NgViewDirective(this.element, this.blockCache,
- Injector injector, Router router,
- this.scope)
- : injector = injector,
- locationService = injector.get(NgRoutingHelper)
+
+ NgView(this._viewCache, Injector injector, Router router,
+ this._scope, this._viewPort)
+ : _injector = injector,
+ _locationService = injector.get(NgRoutingHelper)
{
- RouteProvider routeProvider = injector.parent.get(NgViewDirective);
+ RouteProvider routeProvider = _injector.parent.get(NgView);
_route = routeProvider != null ?
routeProvider.route.newHandle() :
router.root.newHandle();
- locationService._registerPortal(this);
+ _locationService._registerPortal(this);
_maybeReloadViews();
}
void _maybeReloadViews() {
- if (_route.isActive) locationService._reloadViews(startingFrom: _route);
+ if (_route.isActive) _locationService._reloadViews(startingFrom: _route);
}
- detach() {
+ void detach() {
_route.discard();
- locationService._unregisterPortal(this);
+ _locationService._unregisterPortal(this);
}
- _show(String templateUrl, Route route, List<Module> modules) {
+ void _show(_View viewDef, Route route, List<Module> modules) {
assert(route.isActive);
if (_viewRoute != null) return;
@@ -108,41 +114,52 @@ class NgViewDirective implements NgDetachAware, RouteProvider {
_cleanUp();
});
- var viewInjector = injector;
- if (modules != null) {
- viewInjector = forceNewDirectivesAndFilters(viewInjector, modules);
- }
+ var viewInjector = modules == null ?
+ _injector :
+ forceNewDirectivesAndFilters(_injector, modules);
var newDirectives = viewInjector.get(DirectiveMap);
- blockCache.fromUrl(templateUrl, newDirectives).then((blockFactory) {
- _cleanUp();
- _previousScope = scope.createChild(new PrototypeMap(scope.context));
- _previousBlock = blockFactory(
- viewInjector.createChild(
- [new Module()..value(Scope, _previousScope)]));
+ var viewFuture = viewDef.templateHtml != null ?
+ new Future.value(_viewCache.fromHtml(viewDef.templateHtml, newDirectives)) :
+ _viewCache.fromUrl(viewDef.template, newDirectives);
- _previousBlock.elements.forEach((elm) => element.append(elm));
+ viewFuture.then((viewFactory) {
+ _cleanUp();
+ _childScope = _scope.createChild(new PrototypeMap(_scope.context));
+ _view = viewFactory(
+ viewInjector.createChild([new Module()..value(Scope, _childScope)]));
+
+ var view = _view;
+ _scope.rootScope.domWrite(() {
+ _viewPort.insert(view);
+ });
});
}
- _cleanUp() {
- if (_previousBlock == null) return;
+ void _cleanUp() {
+ if (_view == null) return;
- _previousBlock.remove();
- _previousScope.destroy();
+ var view = _view;
+ var childScope = _childScope;
+ _scope.rootScope.domWrite(() {
+ _viewPort.remove(view);
+ childScope.destroy();
+ });
- _previousBlock = null;
- _previousScope = null;
+ _view = null;
+ _childScope = null;
}
Route get route => _viewRoute;
+
String get routeName => _viewRoute.name;
+
Map<String, String> get parameters {
var res = <String, String>{};
- var p = _viewRoute;
- while (p != null) {
- res.addAll(p.parameters);
- p = p.parent;
+ var route = _viewRoute;
+ while (route != null) {
+ res.addAll(route.parameters);
+ route = route.parent;
}
return res;
}
@@ -153,18 +170,18 @@ class NgViewDirective implements NgDetachAware, RouteProvider {
* Class that can be injected to retrieve information about the current route.
* For example:
*
- * @NgComponent(/* ... */)
- * class MyComponent implement NgDetachAware {
+ * @Component(/* ... */)
+ * class MyComponent implement DetachAware {
* RouteHandle route;
*
* MyComponent(RouteProvider routeProvider) {
* _loadFoo(routeProvider.parameters['fooId']);
* route = routeProvider.route.newHandle();
- * route.onRoute.listen((RouteEvent e) {
+ * route.onEnter.listen((RouteEvent e) {
* // Do something when the route is activated.
* });
* route.onLeave.listen((RouteEvent e) {
- * // Do something when the route is diactivated.
+ * // Do something when the route is de-activated.
* e.allowLeave(allDataSaved());
* });
* }
« no previous file with comments | « third_party/pkg/angular/lib/routing/ng_bind_route.dart ('k') | third_party/pkg/angular/lib/routing/routing.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698