gpt4 book ai didi

AngularJS - 使用服务和 ng-repeat 时的引用问题

转载 作者:行者123 更新时间:2023-12-02 22:28:10 25 4
gpt4 key购买 nike

我发现自己正在与 javascript 中的“指针”作斗争。这就像我又回到了C++。我想知道您对我遇到的以下问题的处理方法。

我的情况:我有一个ng-repeat,它遍历集合。当点击其中一个集合元素时,我会复制该元素对其进行更改并将数据 POST/PUT 到服务器

如果服务器回复 200,那么我将将这些更改应用到集合。该集合包含对象,因此这意味着我使用的是引用而不是值。

带有服务的模块定义:

angular.module('dataModule', [])

.service('DataService', function () {
this.collection = [{id:0, who: 'I'},
{id:1, who: 'YOU'},
{id:2, who: 'HE'},
{id:3, who: 'SHE'},
{id:4, who: 'IT'}];
})

这里是 Controller :

.controller('listCtrl', function ($scope, $timeout, DataService) {
// Data used in view
$scope.collection = DataService.collection;

// Action trigger from the view
$scope.change = function(data, index){
// Get a copy
var copy = angular.copy(data);

// Apply changes over the copy
copy.id = data.id*100*index;

// Simulate POSTing/Updating data to server
console.log('Sending data to server...');
$timeout(function(){
// Response is 200
var response = 200;

// Assigning copy -> data
data = copy;

// The prev. assignment is not updating the collection
// Of course I could do $scope.collection[index] = copy;
// because this case is simple enough.
// Im finding myself having the service with methods find, edit, ...
// What's a better approach?

}, 2000)
}
});

正如我在评论中所说,我发现自己实现了查找、编辑或获取服务等功能。这是要走的路吗???

这是 jsfiddle http://jsfiddle.net/kitimenpolku/M66LV/5/万一我无法正确解释它。

最佳答案

从我的 Angular 来看,在写入服务器后可以通过两种方法更新 View :

  1. 您再次向服务器请求整个集合,然后设置它本地。这需要使用 promise 并替换当前收藏与新收藏。此替换将自动触发您所在的 ng-repeat 指令中的更新在您的模板中使用。
  2. 您在本地执行相同的转换,正如您自己提到的那样。这需要找到数组的正确索引并将旧对象替换为已编辑的对象。这就是我喜欢设置自己的应用程序的方式,而且实际上并不难做到。方法如下:

我可以看到你确实在考虑这个 javascript 替代品,就好像它是在 C++ 中一样。在这里,您的服务器回调中的 data = copy; 只是更新引用,而不是任何数据本身,这是正确的。

相反,您可以直接更改集合本身:$scope.collection[index] = copy

这是一个工作 fiddle :http://jsfiddle.net/wilsonjonash/GZ2eR/

关于AngularJS - 使用服务和 ng-repeat 时的引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24402336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com