From a665d1d2091bde55f7b3bdc765f1e79b5b515e1d Mon Sep 17 00:00:00 2001 From: Uri Shaked Date: Fri, 1 May 2015 15:00:01 +0300 Subject: [PATCH] feat(NavView): support ControllerAs syntax for ion-nav-views Closes #3058. Closes #2499. Cloese #3651 This adds support for setting up controllers like this .state('app', { url: '/app', abstract: true, templateUrl: 'templates/menu.html', controller: 'AppCtrl', controllerAs: 'main' }) --- js/angular/controller/navViewController.js | 3 +++ .../controller/navViewController.unit.js | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/js/angular/controller/navViewController.js b/js/angular/controller/navViewController.js index 88d693c6fca..05bc2de5653 100644 --- a/js/angular/controller/navViewController.js +++ b/js/angular/controller/navViewController.js @@ -267,6 +267,9 @@ function($scope, $element, $attrs, $compile, $controller, $ionicNavBarDelegate, if (viewLocals && viewLocals.$$controller) { viewLocals.$scope = viewScope; var controller = $controller(viewLocals.$$controller, viewLocals); + if (viewLocals.$$controllerAs) { + viewScope[viewLocals.$$controllerAs] = controller; + } $element.children().data('$ngControllerController', controller); } diff --git a/test/unit/angular/controller/navViewController.unit.js b/test/unit/angular/controller/navViewController.unit.js index caf2010b897..3aab24ee6ea 100644 --- a/test/unit/angular/controller/navViewController.unit.js +++ b/test/unit/angular/controller/navViewController.unit.js @@ -81,5 +81,26 @@ describe('$ionicNavView controller', function() { expect(navBarCtrl.title()).toBe('My title'); })); + it('should support controllerAs syntax', inject(function($rootScope, $compile) { + var containerEle = angular.element('
'); + var navBarEle = angular.element(''); + var navViewEle = angular.element(''); + var innerElement = angular.element(''); + + containerEle.append(navBarEle); + navBarEle.append(navViewEle); + + $compile(containerEle)($rootScope); + + var navViewCtrl = navViewEle.data('$ionNavViewController'); + var navViewScope = navViewEle.scope(); + + var ViewCtrlConstructor = jasmine.createSpy('ViewCtrlConstructor'); + navViewCtrl.appendViewElement(innerElement, {$$controller: ViewCtrlConstructor, $$controllerAs: 'vm'}); + + var innerScope = innerElement.scope(); + expect(ViewCtrlConstructor).toHaveBeenCalled(); + expect(innerScope.vm instanceof ViewCtrlConstructor).toBeTruthy(); + })); });