Improve this Doc View Source

## Overview

A decorator for `$controller` with additional `bindings` parameter, useful when testing controllers of directives that use `bindToController`.

Depending on the value of `preAssignBindingsEnabled()`, the properties will be bound before or after invoking the constructor.

## Example

    // Directive definition ...

    myMod.directive('myDirective', {
      controller: 'MyDirectiveController',
      bindToController: {
        name: '@'
      }
    });

    // Controller definition ...

    myMod.controller('MyDirectiveController', ['$log', function($log) {
      this.log = function() {
        $log.info(this.name);
      };
    }]);

    // In a test ...

    describe('myDirectiveController', function() {
      describe('log()', function() {
        it('should write the bound name to the log', inject(function($controller, $log) {
          var ctrl = $controller('MyDirectiveController', { /* no locals */ }, { name: 'Clark Kent' });
          ctrl.log();

          expect(ctrl.name).toEqual('Clark Kent');
          expect($log.info.logs).toEqual(['Clark Kent']);
        }));
      });
    });

## Usage

`$controller(constructor, locals, [bindings]);`

### Arguments

Param | Type | Details
--- | --- | ---

constructor

function()string

If called with a function then it's considered to be the controller constructor function. Otherwise it's considered to be a string which is used to retrieve the controller constructor using the following steps:

- check if a controller with given name is registered via `$controllerProvider`
- check if evaluating the string on the current scope returns a constructor

- if $controllerProvider#allowGlobals, check `window[constructor]` on the global `window` object (deprecated, not recommended)

  The string can use the `controller as property` syntax, where the controller instance is published as the specified property on the `scope`; the `scope` must be injected into `locals` param for this to work correctly.

locals | Object | Injection locals for Controller.
bindings (optional) | Object | Properties to add to the controller instance. This is used to simulate the `bindToController` feature and simplify certain kinds of tests.

### Returns

Object | Instance of given controller.