Javascript 将作用域作为参数传递到要保存的函数中
我的控制器有两个功能,如下所示Javascript 将作用域作为参数传递到要保存的函数中,javascript,angularjs,function,parameters,Javascript,Angularjs,Function,Parameters,我的控制器有两个功能,如下所示 $scope.formatPaymentDates = function() { $scope.formatDate($scope.payment.due_date); $scope.formatDate($scope.payment.date); }; $scope.formatDate = function(attr) { if (attr) { var split_date = attr.split("-"); if (s
$scope.formatPaymentDates = function() {
$scope.formatDate($scope.payment.due_date);
$scope.formatDate($scope.payment.date);
};
$scope.formatDate = function(attr) {
if (attr) {
var split_date = attr.split("-");
if (split_date[0].length == 4) {
attr = split_date[1] + "-" + split_date[2] + "-" + split_date[0];
} else {
attr = split_date[2] + "-" + split_date[0] + "-" + split_date[1];
}
}
};
问题是函数formatDate只设置scope变量属性,而不保存它。我缺少什么?在JavaScript中,字符串和数字通过值传递,而对象通过引用传递。您应该传递一个对象作为参数 或者,如@faby所述,返回值:
$scope.formatPaymentDates = function() {
$scope.payment.due_date = $scope.formatDate($scope.payment.due_date);
$scope.payment.date = $scope.formatDate($scope.payment.date);
};
$scope.formatDate = function(attr) {
var result;
if (attr) {
var split_date = attr.split("-");
if (split_date[0].length == 4) {
result = split_date[1] + "-" + split_date[2] + "-" + split_date[0];
} else {
result = split_date[2] + "-" + split_date[0] + "-" + split_date[1];
}
}
return result;
};
问题是您没有从formatDate函数返回任何结果。 您正在操作函数内的变量,然后销毁它 试试这个
$scope.formatDate = function(attr) {
if (attr) {
var split_date = attr.split("-");
if (split_date[0].length == 4) {
attr = split_date[1] + "-" + split_date[2] + "-" + split_date[0];
} else {
attr = split_date[2] + "-" + split_date[0] + "-" + split_date[1];
}
return attr;
}
return null
};
然后
$scope.formatPaymentDates = function() {
$scope.payment.due_date= $scope.formatDate($scope.payment.due_date);
$scope.payment.date=$scope.formatDate($scope.payment.date);
};
如果
attr
参数是一个对象,那么它将起作用,因为所有对象都是通过JS中的引用传递的。但它似乎是一个字符串,它是通过值传递的。我从来没有想过这一点。谢谢。@MatthiasDailey我知道理论上你说的是真的。事实恰恰相反。我请您试一试,您将始终看到对象变量的行为就像是按值传递一样。@faby,也许您指的是传递对象的参数,这些参数的计算结果是数字和字符串。但我向您保证,在JavaScript中,对象总是通过引用传递的。