使用 Angular 服务并且不更改函数调用中的变量
Using Angular service and not changing variable from function call
我正在使用角度服务来获取库存项目列表,检查项目是否在该列表中,然后将其删除。但是,我不想更改服务变量本身,只想更改我创建的临时值。这是我的代码:
var inventoryItems = InventoryService.all();
console.log("inventorya: ", InventoryService.all());
inventoryItems.splice($index, 1);
console.log("inventoryb: ", InventoryService.all());
我希望 InventoryService.all() 始终返回相同的值,但它会改变返回的值。我试过:
var inventoryItems = new Object(InventoryService.all());
但这似乎也行不通。我做错了什么?
您可以使用 angular.copy() 克隆数组。
例如var inventoryItems = angular.copy(InventoryService.all());
或者更好的是,您可以从InventoryService
内部复制数组,这样您在使用它时就不必考虑它
听起来InventoryService.all()
返回一个数组。如果拼接数组,则会更改数组的内容。由于它是对数组的引用,因此所有引用都反映了这些更改。听起来你想要的是返回数组的副本。
你可以通过调用 Array.slice() 来做到这一点。这样:
var inventoryItems = InventoryService.all().slice();
如果 InventoryService.all() 返回一个 Object,则表示您将 Object 引用分配给 inventoryItems。您必须创建一个新对象或克隆它。
这是测试的小提琴:http://jsfiddle.net/ew5hgkpx/
var test1 = testFactory.getObj();
console.log(test1); // returns [1,2]
//var test2 = testFactory.getObj().splice(0,1);
// test1 now return [2]
var test3 = Object.create(testFactory.getObj()).splice(0,1);
// test1 still returns [1,2]
相关文章:
- 如何在Javascript函数调用中循环变量
- 为什么这个函数调用会破坏程序并导致未定义的变量
- JavaScript中自调用函数中变量的生存期是多少?
- 函数调用的变量更改未显示在角度引导模式窗口中
- 如何在函数调用时处理 javascript 中的变量
- 如何在文档准备函数中调用变量的click函数
- 调用变量为paramenter的函数
- 可以't获取具有“t”的对象变量;这个“;由setTimeout()函数调用的对象函数中的属性
- Javascript将一个变量从函数调用传递给innerHtml
- 循环变量作为异步函数调用中的参数
- 将变量添加到对象函数调用的末尾
- 在Coffeescription中使用一个自调用函数来隐藏其余代码中的函数和变量,这是一个好主意吗
- 是否可以存储javascript函数调用并在设置某些变量时执行它
- 如何使用一些变量参数从javascript函数调用 asp.net C#函数并从C#函数获取字符串返回
- 我们如何在外部的节点 js 中使用函数调用中的内部变量
- JS:从函数外部调用变量
- 如何将变量从回调函数传递到函数调用
- 转义函数调用的变量
- 如果我有一个变量,分配给函数调用的值,如果函数调用的参数更改,是否可以更新该变量
- 从一个函数调用变量到另一个函数