不能通过引用Angular

时间:2016-03-30 09:21:50

标签: javascript arrays angularjs

只是一个简单的问题!

我有一个排序函数,根据情况应该订购两个数组。所以我传递了数组引用,但是没有过滤数组!有什么想法吗?

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();
};

2 个答案:

答案 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;