使用 Angular 服务并且不更改函数调用中的变量

Using Angular service and not changing variable from function call

本文关键字:函数调用 变量 Angular 服务 使用      更新时间:2023-09-26

我正在使用角度服务来获取库存项目列表,检查项目是否在该列表中,然后将其删除。但是,我不想更改服务变量本身,只想更改我创建的临时值。这是我的代码:

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]