Javascript 如何从别处的脚本调用角度控制器上的函数?

Javascript 如何从别处的脚本调用角度控制器上的函数?,javascript,angularjs,controller,Javascript,Angularjs,Controller,我有一个这样的控制器(去掉了一堆东西): 函数isDateOfBirthValid()由控制器内部使用,但我也希望能够从外部代码调用它 (我想我会被告知这违反了角度模式,但这真的会节省我很多时间…) 我需要如何更改控制器,以便从外部调用此函数?我不能只是将函数移到控制器之外,因为该函数以一种重要的方式修改视图模型的状态。您的函数应该在关注点之间分开。它的名字是DateOfBirthValid并不意味着它应该有任何副作用 应该将具有副作用的功能部分转移到具有业务模型的服务中。控制器只需反映模型的内

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

函数isDateOfBirthValid()由控制器内部使用,但我也希望能够从外部代码调用它

(我想我会被告知这违反了角度模式,但这真的会节省我很多时间…)


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

您的函数应该在关注点之间分开。它的名字
是DateOfBirthValid
并不意味着它应该有任何副作用

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


介绍如何从angular外部更新服务。

例如,您可以使用angular服务

服务代码

控制器代码

选项1

function SignupController($scope , CommonFunctions) {

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


也许
validateDateOfBirth()
会是一个更好的名字。验证逻辑通常会产生副作用,例如显示消息和修改CSS类。这类事情会影响视图模型,我不相信我能在控制器外部接触到它。你说的“外部”到底是什么意思?从另一个角度来看,或者从一个完全独立的外部库?后者。具体来说,jQuery插件的初始化代码。这一切都是有意义的,但它没有回答问题,即如何从角度构造(即jQuery插件)外部调用该验证方法。这个问题与jQuery插件和Angular之间共享代码有关。。。如果这是一个合理的问题。如果插件是用指令初始化的,这个问题可能会消失
app.service('CommonFunctions', function() {
  this.isDateOfBirthValid = function(day, month, year) {
      /// your code here
  };

  this.function2 = function() {
      // your code here
  };
});
function SignupController($scope , CommonFunctions) {

  $scope.isValidDOB = CommonFunctions.isDateOfBirthValid (1,2,2013);
}
var app = angular.module('app');
 app.controller('SignupController', function($scope, $location, $routeParams, CommonFunctions) {
  $scope.isValidDOB = CommonFunctions.isDateOfBirthValid (1,2,2013);
});