diff options
| author | Misko Hevery | 2012-06-06 15:54:40 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2013-04-22 23:28:41 -0700 | 
| commit | cd38cbf975b501d846e6149d1d993972a1af0053 (patch) | |
| tree | 3857a2879f782c6b7f1350fcd5c8d52e082fd160 /test | |
| parent | 021bdf3922b6525bd117e59fb4945b30a5a55341 (diff) | |
| download | angular.js-cd38cbf975b501d846e6149d1d993972a1af0053.tar.bz2 | |
feat(controller): support as instance syntax
Support ng-controller="MyController as my" syntax
which publishes the controller instance to the
current scope.
Also supports exporting a controller defined with route:
````javascript
angular.module('routes', [], function($routeProvider) {
  $routeProvider.when('/home', {controller: 'Ctrl as home', templateUrl: '...'});
});
````
Diffstat (limited to 'test')
| -rw-r--r-- | test/ng/controllerSpec.js | 11 | ||||
| -rw-r--r-- | test/ng/directive/ngControllerSpec.js | 23 | ||||
| -rw-r--r-- | test/ng/directive/ngViewSpec.js | 21 | 
3 files changed, 55 insertions, 0 deletions
| diff --git a/test/ng/controllerSpec.js b/test/ng/controllerSpec.js index 2abcace9..e34463b0 100644 --- a/test/ng/controllerSpec.js +++ b/test/ng/controllerSpec.js @@ -88,4 +88,15 @@ describe('$controller', function() {      expect(ctrl.$scope).toBe(scope);    }); + + +  it('should publish controller instance into scope', function() { +    var scope = {}; + +    $controllerProvider.register('FooCtrl', function() { this.mark = 'foo'; }); + +    var foo = $controller('FooCtrl as foo', {$scope: scope}); +    expect(scope.foo).toBe(foo); +    expect(scope.foo.mark).toBe('foo'); +  });  }); diff --git a/test/ng/directive/ngControllerSpec.js b/test/ng/directive/ngControllerSpec.js index ab85c569..402ddf09 100644 --- a/test/ng/directive/ngControllerSpec.js +++ b/test/ng/directive/ngControllerSpec.js @@ -3,6 +3,11 @@  describe('ngController', function() {    var element; +  beforeEach(module(function($controllerProvider) { +    $controllerProvider.register('PublicModule', function() { +      this.mark = 'works'; +    }); +  }));    beforeEach(inject(function($window) {      $window.Greeter = function($scope) {        // private stuff (not exported to scope) @@ -27,6 +32,10 @@ describe('ngController', function() {      $window.Child = function($scope) {        $scope.name = 'Adam';      }; + +    $window.Public = function() { +      this.mark = 'works'; +    }    }));    afterEach(function() { @@ -41,6 +50,20 @@ describe('ngController', function() {    })); +  it('should publish controller into scope', inject(function($compile, $rootScope) { +    element = $compile('<div ng-controller="Public as p">{{p.mark}}</div>')($rootScope); +    $rootScope.$digest(); +    expect(element.text()).toBe('works'); +  })); + + +  it('should publish controller into scope from module', inject(function($compile, $rootScope) { +    element = $compile('<div ng-controller="PublicModule as p">{{p.mark}}</div>')($rootScope); +    $rootScope.$digest(); +    expect(element.text()).toBe('works'); +  })); + +    it('should allow nested controllers', inject(function($compile, $rootScope) {      element = $compile('<div ng-controller="Greeter"><div ng-controller="Child">{{greet(name)}}</div></div>')($rootScope);      $rootScope.$digest(); diff --git a/test/ng/directive/ngViewSpec.js b/test/ng/directive/ngViewSpec.js index e9d53110..3150c040 100644 --- a/test/ng/directive/ngViewSpec.js +++ b/test/ng/directive/ngViewSpec.js @@ -55,6 +55,27 @@ describe('ngView', function() {    }); +  it('should instantiate controller with an alias', function() { +    var log = [], controllerScope, +        Ctrl = function($scope) { +          this.name = 'alias'; +          controllerScope = $scope; +        }; + +    module(function($compileProvider, $routeProvider) { +      $routeProvider.when('/some', {templateUrl: '/tpl.html', controller: Ctrl, controllerAlias: 'ctrl'}); +    }); + +    inject(function($route, $rootScope, $templateCache, $location) { +      $templateCache.put('/tpl.html', [200, '<div></div>', {}]); +      $location.path('/some'); +      $rootScope.$digest(); + +      expect(controllerScope.ctrl.name).toBe('alias'); +    }); +  }); + +    it('should support string controller declaration', function() {      var MyCtrl = jasmine.createSpy('MyCtrl'); | 
