在 AngularJS 中获取基本控制器内的 ControllerAs 别名

Get ControllerAs alias inside base controller in AngularJS

我们有用 AngularJS 编写的遗留代码,不使用 controllerAs

Sample Plunker

我们的 BaseController(Plunker:script.js 第 19 行)有这段代码可以使所有 class 方法在 $scope 中可用,而无需编写 this.$scope.method = ...

this.$scope[key] = this[key].bind(this)

现在,由于我们开始迁移到 Controller as vm 语法,因此我们不再需要此代码。在 Plunker NewCtrl 中甚至不需要 $scope 注入,但是由于这一行我们需要注入。

问题:如何判断当前控制器(NewCtrl)是否使用controllerAs语法?

如果您的应用使用 ui-router,您可以使用 $state 服务来检查控制器是否使用 as 语法声明。

$state.get() returns 所有注册状态的列表。在每个项目中,您可以检查 controllerAs 是否存在或在 controller 中检查 'as' :

controller: 'testCtrl as vm' or 
controllerAs: 'vm'

在控制器内部,您可以像上面那样使用 $state.current