我正在使用Angular.js并尝试清除首先实例化并保存在我的模块上的数组:
angular.module(myApp)
.controller('myCtrl', function ($rootScope){
var vm = this;
vm.myArr = ["Clear", "Me"]
vm.clearer = function(arr) {
arr = [];
};
vm.copier = function(arrToOverwrite, arrToCopy) {
arrToOverWrite = angular.copy(arrToCopy);
};
我从我的HTML文件中调用此方法:
(controller myCtrl is aliased as ctrl)
<input type="button" ng-click="ctrl.clearer(ctrl.myArr)" value="clear">
然而,在JS中,它强调arr
,表示该值从未使用过。并且,假设我总是在HTML中显示myArr
的值,它不受更改的影响。我认为,因为JS是通过引用传递的,如果myArr
作为clearer
方法中的引用传递,如果它在那里得到更新,那么它将随地用该值更新?
我该怎么做?我需要在其他位置使用clearer
方法在其他数组上,其他数组可能在其他时间在JS文件中保存在“内存中”。
答案 0 :(得分:2)
当您调用该函数时,您为arr
param分配了对ctrl.myArr
的引用。使用表达式arr = []
,您可以指定arr
来引用空数组,但ctrl.myArr
仍然指向原始数组。
在这种情况下,您需要通过将长度更改为0来直接改变数组,例如:
var array = [1, 2, 3];
var clearer = function(arr) {
arr.length = 0;
};
clearer(array);
console.log(array);
&#13;
如果您需要删除某些项目或添加新项目,可以使用Array#splice或angular.copy()
用另一个项目覆盖该数组:
var array = [1, 2, 3, 4, 5, 6, 7];
var replacement = [9, 10, 11];
function copier(arrToOverwrite, arrToCopy) {
arrToOverwrite.splice(0, arrToOverwrite.length, ...arrToCopy); // or angular.copy(arrToCopy, arrToOverwrite)
};
copier(array, replacement);
console.log(array);
&#13;