Javascript 角传递变量作为参数的函数,并在
我遇到了以下问题:我需要将schoolList作为参数传递给ngClick函数(以便可以将该函数与其他数组一起重用)。但是,当我尝试在函数中使用“group”局部变量处理数组时,它不会更新数组本身 如果我在函数中使用'scope.schoolsList'而不是'group',则一切正常 有没有办法解决这个问题并使其发挥作用Javascript 角传递变量作为参数的函数,并在,javascript,angularjs,Javascript,Angularjs,我遇到了以下问题:我需要将schoolList作为参数传递给ngClick函数(以便可以将该函数与其他数组一起重用)。但是,当我尝试在函数中使用“group”局部变量处理数组时,它不会更新数组本身 如果我在函数中使用'scope.schoolsList'而不是'group',则一切正常 有没有办法解决这个问题并使其发挥作用 我的指令的相关PAR: link: { scope.schoolsList = [ 'item 1',
我的指令的相关PAR:
link: {
scope.schoolsList = [
'item 1',
'item 2',
'item 3',
'item 4',
];
scope.addItem = function(obj, array, group){
array.push(obj);
group = group.filter(function(list){
return list !== obj;
});
};
scope.removeItem = function($index, group){
group.push(scope.newData.schools[$index]);
scope.newData.schools.splice($index,1);
console.log(scope.newData.schools);
}
}
HTML的相关PAR
<select id="newSchool" name="newSchool" ng-model="newSchool" ng-options="school for school in schoolsList | orderBy:school">
<option value="" hidden>-- Select --</option>
</select>
<a ng-click="addItem(newSchool, newData.schools, schoolsList)">add</a>
<ul class="list-inline">
<li ng-show="newData.schools.length > 0">
<ng-pluralize count="newData.schools.length"
when="{'0': '','one': 'School: ','other': 'Schools: '}">
</ng-pluralize>
</li>
<li ng-repeat="school in newData.schools">
<span>{{ school }}</span>
<a ng-click="removeItem($index, schoolsList)">[X]</a>
</li>
</ul>
--挑选--
添加
-
-
{{学校}
[X]
这与Javascript处理引用的方式有关。AngularJS非常依赖他们来正确地做事。防止中断引用的最佳经验法则是始终更改对象/变量的属性,而不要更改变量本身
链接:{
scope.data.schoolsList=[
“项目1”,
“项目2”,
“项目3”,
“项目4”,
];
scope.addItem=函数(对象、数组、组){
阵列推送(obj);
group.schoolList=group.schoolList.filter(函数(列表){
返回列表!==obj;
});
};
scope.removietem=函数($index,group){
group.schoolList.push(scope.newData.schools[$index]);
范围.newData.schools.splice($index,1);
console.log(scope.newData.schools);
}
}
--挑选--
添加
-
- {{school}[X]
问题是您正在重新分配变量组
。当函数启动时,group
引用了与schoolList
相同的对象,但是当您执行group=group.filter…
时,您正在创建一个新数组,并引用group
,因此对它的任何更改都不会链接到schoolList
。当函数结束时,您不会对其执行任何操作,这与不使用它是一样的
我不清楚您的指令的用途,但是如果您想重用整个指令,您应该为集合定义一个具有双向绑定的隔离作用域。如果您不想重复使用整个指令,而只想重复使用单个功能,请提供有关指令本身用途的更多信息。为此,您需要修改传递到
addItem
中的组数组,例如使用splice
比如,类似这样的(未经测试):
scope.addItem=函数(对象、数组、组){
阵列推送(obj);
对于(var i=0;it)可以通过这种方式在其他数组中重复使用该函数,因为它不是泛型的,不能用于其他数组。group=group.filter()似乎不正确,您可以尝试在指令级别声明组变量,而不是函数作用域。
link: {
scope.data.schoolsList = [
'item 1',
'item 2',
'item 3',
'item 4',
];
scope.addItem = function(obj, array, group){
array.push(obj);
group.schoolList = group.schoolList.filter(function(list){
return list !== obj;
});
};
scope.removeItem = function($index, group){
group.schoolList.push(scope.newData.schools[$index]);
scope.newData.schools.splice($index,1);
console.log(scope.newData.schools);
}
}
<select id="newSchool" name="newSchool" ng-model="newSchool" ng-options="school for school in data.schoolsList | orderBy:school">
<option value="" hidden>-- Select --</option>
</select>
<a ng-click="addItem(newSchool, newData.schools, data)">add</a>
<ul class="list-inline">
<li ng-show="newData.schools.length > 0">
<ng-pluralize count="newData.schools.length" when="{'0': '','one': 'School: ','other': 'Schools: '}"></ng-pluralize>
</li>
<li ng-repeat="school in newData.schools"><span>{{school}} </span> <a ng-click="removeItem($index, data)">[X]</a></li>
</ul>
scope.addItem = function(obj, array, group){
array.push(obj);
for(var i=0; i<group.length; i++) {
if(group[i] !== list) {
group.splice(i, 1); // splice modifies the array
i--; // need to check spot 'i' again
}
}
};