title: AngularJS 1.3.0 + TypeScript controller definition issue
body: <p>In our application we use the "controller as" syntax:</p>
  
  <pre><code>&lt;div class="workspace-header" ng-controller="LoginController as loginCtl"&gt;
  </code></pre>
  
  <p>To define the LoginController, we define it as a TypeScript class:</p>
  
  <pre><code>class LoginController {
      // variables here
  
      constructor($rootScope, $http, $location, $cookieStore, AuthService, AUTH_EVENTS, localStorageService) {
          // set variables
  
          this.$rootScope.$on(AUTH_EVENTS.logoutSuccess, () =&gt; {
              this.logout();
          });
      }
  
      public login(credentials: any): void {
          this.AuthService.login(credentials).then(() =&gt; {
              // login success
          }, () =&gt; {
              // login failed
          });
      }
  
      public logout() {
  
      }
  }
  </code></pre>
  
  <p>and instantiate it this way:</p>
  
  <pre><code>.controller('LoginController', ['$rootScope', '$http', '$location', '$cookieStore', 'AuthService', 'AUTH_EVENTS', 'localStorageService',
      ($rootScope, $http, $location, $cookieStore, AuthService, AUTH_EVENTS, localStorageService) =&gt;
          new LoginController($rootScope, $http, $location, $cookieStore, AuthService, AUTH_EVENTS, localStorageService);
  ])
  </code></pre>
  
  <p>After upgrading to AngularJS 1.3.0 this does not work at all. The "controller as" syntax is completely broken (when used in this fashion). We define a form on the page with ng-submit:</p>
  
  <pre><code>&lt;form name="loginForm" ng-submit="loginCtl.login(dc.credentials)" novalidate&gt;
      ... fields here
      &lt;button type="submit"&gt;Login&lt;/button&gt;
  &lt;/form&gt;
  </code></pre>
  
  <p>The loginCtl.login() does nothing, and no errors are output to the console.</p>
  
  <p>After a lot of debugging and some digging, I believe the breaking change in AngularJS is this: </p>
  
  <p><a href="https://github.com/angular/angular.js/issues/8876" rel="nofollow">https://github.com/angular/angular.js/issues/8876</a>
  <a href="https://github.com/angular/angular.js/pull/8882" rel="nofollow">https://github.com/angular/angular.js/pull/8882</a> (added note to documentation)</p>
  
  <p>If I modify my controller as such:</p>
  
  <pre><code>.controller('LoginController', ['$rootScope', '$http', '$location', '$cookieStore', 'AuthService', 'AUTH_EVENTS', 'localStorageService',
      function ($rootScope, $http, $location, $cookieStore, AuthService, AUTH_EVENTS, localStorageService) {
          var loginCtrl = new LoginController($rootScope, $http, $location, $cookieStore, AuthService, AUTH_EVENTS, localStorageService);
  
          // since controllers always return 'this', extend 'this' with the controllers
          // properties and it's prototype's properties
          _.extend(this, loginCtrl);
          _.extend(this, loginCtrl["__proto__"]);
      }
  ])
  </code></pre>
  
  <p>Then I can get it working, but this seems messy (and I'm not sure if I would have to chain up prototypes in case of superclasses).</p>
  
  <p>Has anyone else run into this and have a better approach for defining these classes in TypeScript?</p>