我有 2 个 Angular 多选列表,它们相互依赖。一种是父列表,一种是子列表。登陆时,子列表中没有任何内容,一旦您从父多项选择中选择(一个或多个)项目,它将使用父列表中所选项目的子项填充子列表。这非常有用 - 仅供引用,我在父模型上有一个 $watch ,因此当它发生更改时(用户在父列表中选择某些内容 - 然后它将调用 $http 并获取子列表的结果
像这样 -
$scope.$watch('selectedResources', function (newValue) {
angular.forEach($scope.selectedResources, function(data){
$scope.generalIDArray.push(data.id);
});
//id's = $scope.imageIDArray
//place new data in $scope.imageOptionsSub
$http({
method: 'POST',
url: '/listSubCategories',
data: {
page: 0,
ids: $scope.generalIDArray
}
})
.success(function(data){
//empty options
$scope.resourceOptionsSub = [];
//push new data in
angular.forEach(data.subCategories, function(index) {
$scope.resourceOptionsSub.push(index);
});
});
所以 - 我将所有 id 压入并发送它们以获取结果。
但是 - 这是我的问题。在尝试之后我意识到我不想用所有新结果完全替换resourceOptionsSub,因为用户已经与子结果进行了交互 - 它们有一个 .checked 值,这意味着用户已经选择了它们,这将每次我进行新的调用时都会被清除并刷新,因为它会清空范围并替换它,即使它是相同的项目。
我想要发生的是比较一下resourceOptionsSub中是否已经存在与调用一起传入的项目,并保留原始的resourceOptionsSub并将其与新传入的项目进行比较,也许拉掉不再存在的元素?
我想我应该以某种方式比较 2 个对象 1 是原始对象,2 是新对象 - 如果 2 有 1 没有的东西,则将其从 1 中取出,因为这样我就可以保留原来的对象同样没动过。如果有人能指出我在哪里看的正确方向,我将非常感激,因为我对如何处理这个问题有点茫然。感谢您的阅读!
最佳答案
angular.extend 可以工作,但你需要从一个空对象开始,如下所示:
var updatedObj = angular.extend({}, obj1, obj2);
关于javascript - Angular,比较 2 个对象并替换(可能连接?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26932517/