如何从其他地方的脚本调用Angular控制器上的函数?

时间:2013-10-23 11:52:48

标签: javascript angularjs controller

我有一个这样的控制器(删除了一堆东西):

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模式,但这真的会为我节省很多时间......)

如何更改控制器以便我可以在外部调用此功能?我不能只是将函数移到控制器之外,因为函数以一种重要的方式修改了视图模型的状态。

2 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:0)

您的功能应该在关注点之间分开。它的名字isDateOfBirthValid实际上并不意味着它应该有任何副作用。

应将具有副作用的功能部分移动到具有业务模型的服务中。您的控制器只需要反映模型的内容。控制器不是模型。

This answers处理如何从角度外部更新服务。