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 回答