gpt4 book ai didi

javascript - 如果只有一个更改,为什么 angularJs 会更新数组/散列表的所有元素?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:36:24 25 4
gpt4 key购买 nike

我有一个简单的散列图和一个以文本形式显示状态的简单方法,但是当我只更新 1 个用户状态时,所有这些状态都会更新(为所有用户调用函数)。有没有办法只更新一个元素而不是所有元素?

示例代码在这里,只需看看当您单击“更改状态”按钮时控制台中会发生什么。

HTML:

<div ng-app="myApp">
<div ng-controller="Ctrl">
<div class="user-panel" ng-repeat = "(id, user) in _users">
Status:
<span class="user-status{{user.status}}">
{{getStatusInText(user.status)}}
</span>
<hr>
<div class="toLeft">(<b>{{id}}</b>) {{user.name}}</div>
<div class="toRight">
<button ng-click="changeUserStatus(id, '1')">Change Status</button>
</div>
<div class="clear"></div>
</div>
</div>
</div>

AngularJS:

var app = angular.module('myApp', []);

function Ctrl($scope) {
$scope._users = {"123":{"name":"test","status":"0"}, "124":{"name":"test2", "status":"0"},"125":{"name":"test2", "status":"0"}};

$scope.getStatusInText = function(status) {
console.log("CALLED: " + status);
return (status === "1") ? "online" : "offline";
}

$scope.changeUserStatus = function(uId, status) {
$scope._users[uId].status = status;

}
}

上面例子的 fiddle :

http://jsfiddle.net/ztVnj/3

另一个迭代示例,每次使用 getStatusInText 函数调用。

http://jsfiddle.net/ztVnj/4/

最佳答案

更新示例:http://jsfiddle.net/ztVnj/5/

这里是理论:

将昂贵的操作移到hashmap之外,手动控制更新。如前所述,如果 hashmap 发生任何变化,整个 ng-repeat 都会被重绘。

变化:

绑定(bind)到$scope,添加一个数组将状态值映射到ids。

$scope._users = {"123":{"name":"test","status":"0"}, "124":{"name":"test2", "status":"0"},"125":{"name":"test2", "status":"0"}};
$scope._userStatus = [];

更改模板以查找此数组:

Status: <span class="user-status{{user.status}}">{{_userStatus[id]}}</span>

将 changeStatus 函数更新为更新状态文本的唯一位置,然后在开始时执行一次初始迭代。

$scope.changeUserStatus = function(uId, status) {
console.log("Button Clicked.");
$scope._userStatus[uId] = $scope.getStatusInText(status);
}

angular.forEach($scope._users, function(user, uId) {
$scope._userStatus[uId] = $scope.getStatusInText(user.status);
});

关于javascript - 如果只有一个更改,为什么 angularJs 会更新数组/散列表的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14969502/

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