我有一个这样的控制器(删除了一堆东西):
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模式,但这真的会为我节省很多时间......)
如何更改控制器以便我可以在外部调用此功能?我不能只是将函数移到控制器之外,因为函数以一种重要的方式修改了视图模型的状态。
答案 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处理如何从角度外部更新服务。