我正在构建一个Angular应用程序中创建一个简单的shuffle / unshuffle函数。想法是有一个按钮,点击它将克隆数组,洗牌数组,然后返回数组的洗牌顺序,或者如果数组已被洗牌,它将返回原始数组的克隆所以用户可以恢复原始订单。
我遇到的问题是我无法弄清楚如何将原始订单克隆返回到视图。
这是一个小提琴:http://jsfiddle.net/nf6j1qvz/
这是一些功能代码:
$scope.shuffleThis = function(array) {
if(!$scope.isShuffled){
$scope.isShuffled = true;
$scope.unshuffled = array.slice(0);
var m = array.length, t, i;
// While there remain elements to shuffle
while (m) {
// Pick a remaining element…
i = Math.floor(Math.random() * m--);
// And swap it with the current element.
t = array[m];
array[m] = array[i];
array[i] = t;
}
return array;
}else{
console.log('unshuffling');
$scope.isShuffled = false;
array = $scope.unshuffled;
return array;
}
}
答案 0 :(得分:1)
您可以按如下方式更改ng-click
<button ng-click="array = shuffleThis(array)">
你已经完成了!
Plunkr:
答案 1 :(得分:1)
使用angular.copy代替克隆数组。这是一个很深的副本,并且一直在为我使用的方法不可靠。
https://docs.angularjs.org/api/ng/function/angular.copy
var originalArray = [];
angular.copy(array, originalArray);
// Continue doing your stuffs
但是,你正在调用一个有返回的函数,所以你没有正确设置该变量。
您可以将ng-click更改为
ng-click='array = shuffleThis(array)'
或者代替
return array
在您的函数中,执行
$scope.array = array;
我会亲自做第二种方法。