只是一个简单的问题!
我有一个排序函数,根据情况应该订购两个数组。所以我传递了数组引用,但是没有过滤数组!有什么想法吗?
function order(rowName, array) {
if (vm.row === rowName) {
return;
}
vm.row = rowName;
array = $filter('orderBy')(array, rowName);
return vm.onOrderChange();
};
在我的html中被称为:
data-ng-click = "vm.order('amount', vm.itemsNew)"
我让它像下面一样工作,但是......好吧,我不喜欢它!
function order(rowName, array) {
if (vm.row === rowName) {
return;
}
vm.row = rowName;
if (array === vm.itemsNew)
vm.itemsNew = $filter('orderBy')(vm.itemsNew, rowName);
else
vm.itemsGeneric = $filter('orderBy')(vm.itemsGeneric, rowName);
return vm.onOrderChange();
};
答案 0 :(得分:1)
此行尝试将对array
的引用更改为函数的参数。
array = $filter('orderBy')(array, rowName);
简单的答案是你无法改变函数内部的原始引用。这就是vm.itemsNew = $filter('orderBy')(vm.itemsNew, rowName);
正常工作的原因。
您可以在这里阅读更多内容: Is JavaScript a pass-by-reference or pass-by-value language?
好的是你看到你的解决方案非常难看;)
您可以像这样使用过滤器和重写数组:
function order(rowName, array) {
if (vm.row === rowName) {
return;
}
vm.row = rowName;
var tmpArray = $filter('orderBy')(array, rowName);
array.length = 0; //clears array
angular.forEach(tmpArray, function(item) { // fill array with ordered values from tmpArray.
array.push(item);
});
return vm.onOrderChange();
};
显然,从性能的角度来看,这不是最好的。我强烈建议您了解有关将参数传递给JS中的函数的更多信息。上面的链接是一个很好的起点。
答案 1 :(得分:0)
ng-click
不仅允许您调用函数,还可以评估任意表达式。因此,您可以从函数返回已过滤的数组并将其分配给模型:
data-ng-click = "vm.itemsNew = vm.order('amount', vm.itemsNew)"
功能:
...
array = $filter('orderBy')(array, rowName);
vm.onOrderChange();
return array;