1

私はこのようなコントローラーを持っています(たくさんのものを削除しました):

function SignupController($scope) {

    function isDateOfBirthValid(day, month, year) {
        // Process day, month and year and return a bool...
        // Also update the view model with the appropriate validation message
    }
}

関数 isDateOfBirthValid() はコントローラーによって内部的に使用されますが、外部コードからも呼び出せるようにしたいと考えています。

(これは Angular パターンに違反していると言われると思いますが、実際にはかなりの時間を節約できます...)

この関数を外部から呼び出せるようにするには、コントローラーをどのように変更する必要がありますか? 関数は重要な方法でビューモデルの状態を変更するため、関数をコントローラーの外に移動することはできません。

4

2 に答える 2

2

たとえば、角度サービスを使用できます

サービスコード

app.service('CommonFunctions', function() {
  this.isDateOfBirthValid = function(day, month, year) {
      /// your code here
  };

  this.function2 = function() {
      // your code here
  };
});

コントローラーコード

オプション1

function SignupController($scope , CommonFunctions) {

  $scope.isValidDOB = CommonFunctions.isDateOfBirthValid (1,2,2013);
}

オプション 2

var app = angular.module('app');
 app.controller('SignupController', function($scope, $location, $routeParams, CommonFunctions) {
  $scope.isValidDOB = CommonFunctions.isDateOfBirthValid (1,2,2013);
});
于 2013-10-23T12:05:23.267 に答える
0

関数は、懸念間で分離する必要があります。その名前isDateOfBirthValidは、実際に副作用があるべきであることを意味するものではありません.

副作用のある機能の部分は、ビジネス モデルを持つサービスに移動する必要があります。コントローラーは、モデルのコンテンツを反映するだけで済みます。コントローラモデルではありません。

この回答は、角度の外部からサービスを更新する方法を扱います。

于 2013-10-23T12:02:31.097 に答える