0

次のようなコントローラーがあります。

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

  $scope.doSomething = function()
  {
    helper(); 
  };
}

doSomething が呼び出されると、helper() が定義されていないというエラーが表示されます。helper() の呼び出しの前に「this」を配置しても機能しません。ここでの「this」はコントローラー インスタンスではなく $scope を参照するためです。

私の質問は: スコープ上の関数内からそのようなローカル ヘルパー関数を呼び出す方法はありますか? ( $scope にも helper() を配置できることはわかっていますが、ビューから呼び出されるものではなく、厳密には便利な関数であるため、むしろそうしません。)

このようにコードを構造化する理由は、単体テストから helper() 関数の個別のテストを容易にするためです。

4

1 に答える 1

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

  $scope.doSomething = function()
  {
    helperScope.helper(); 
  };
}

もちろん、それよりもわかりやすい名前を付けますが、基本的な考え方は、this必要なスコープ内の変数に割り当てることです。

于 2013-11-01T13:01:18.557 に答える