从 $scope 上的函数访问控制器内的实例函数

Accessing instance functions inside controller from function on $scope

本文关键字:函数 控制器 实例 访问控制 访问 scope      更新时间:2023-09-26

我有一个看起来像这样的控制器:

function controller($scope)
{
  this.helper() = function()
  {
    // some processing
  };
  $scope.doSomething = function()
  {
    helper(); 
  };
}

当调用doSomething时,我收到一个错误,指出helper()未定义。将"this"放在对helper()的调用前面也不起作用,因为这里的"this"指的是$scope而不是控制器实例。

我的问题是:有没有办法从作用域上的函数中调用这样的本地帮助程序函数?(我知道我也可以把 helper() 放在$scope上,但宁愿不这样做,因为它严格来说是一个方便的函数,而不是从视图中调用的东西。

像这样构建代码的原因是为了便于将 helper() 函数与单元测试分开测试。

function controller($scope)
{
  this.helper() = function()
  {
    // some processing
  };
  var helperScope = this;
  $scope.doSomething = function()
  {
    helperScope.helper(); 
  };
}

当然,给它一个比这更具描述性的名称,但基本思想是将this分配给所需范围内的变量。