在控制器的构造函数中访问prototypal $ scope函数

时间:2014-08-18 15:35:14

标签: angularjs

大多数棱角分明的新款"款式"使用命名构造函数替换匿名控制器函数的指南,因为这是正确的角度方式(模式),即使早期文档不符合。

E.g:

var testCtrl = function(){
    this.prop = 'Prop';
    ....
}

angular.module('app').controller('test', testCtrl);

为了调试能力和节省内存,我能理解这个概念。

我的问题:

如果之前您可以通过订阅$scope.$on()方法收听活动:

angular.module( 'app' ).controller( 'test', [ '$scope', function ( $scope ) {
    $scope.$on('event', function (event, params) {
        ...
    });
}]);

你怎么能在构造函数中做到这一点?

还有一个问题!在构造函数中注入$ scope并在$ scope上订阅事件将不会在构造函数范围内执行回调。

1 个答案:

答案 0 :(得分:0)

实际上,没有一个示例具有命名构造函数,它们只是注册控制器的不同样式。

为了两种样式的调试能力,您可以使用命名的构造函数,如下所示:

function testCtrl() {
  this.prop = 'Prop';
  ....
}

angular.module('app').controller('test', testCtrl);

或者这个:

angular.module( 'app' ).controller( 'test', [ '$scope', function testCtrl( $scope ) {
  $scope.$on('event', function (event, params) {
    ...
  });
}]);

要订阅第一种风格的活动,您可以这样做:

function testCtrl($scope) {
  this.prop = 'Prop';

  $scope.$on('event', function (event, params) {
    ...
  });
}

angular.module('app').controller('test', ['$scope', testCtrl]);

希望这有帮助。