Javascript 检查对象是否在ng repeat中的另一个对象数组中
我以复选框列表的形式列出了一个Javascript 检查对象是否在ng repeat中的另一个对象数组中,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我以复选框列表的形式列出了一个GET请求中的区域列表(我使用ng repeat),所有选中的je复选框都保存在JSON中的对象数组中,保存到localStorage中。 但是我找不到一种方法来预先检查用户以前检查过的复选框。我试图使用indexOf或includes,但没有成功 这是密码,如果你能帮我的话。该应用程序基于爱奥尼亚Cordova v1构建: 查看循环 <li ng-repeat="region in regionFilteredList = (regionList | fil
GET
请求中的区域列表(我使用ng repeat),所有选中的je复选框都保存在JSON中的对象数组中,保存到localStorage中。
但是我找不到一种方法来预先检查用户以前检查过的复选框。我试图使用indexOf或includes,但没有成功
这是密码,如果你能帮我的话。该应用程序基于爱奥尼亚Cordova v1构建:
查看循环
<li ng-repeat="region in regionFilteredList = (regionList | filter:{name : search}) track by region.id">
<ion-checkbox class="item-checkbox-right" ng-model="selected" ng-checked="selectAll" ng-click="toggleSelection(region)">
{{ region.name }}
</ion-checkbox>
</li>
尝试
$scope.selectedRegions.indexOf($scope.regionList[0]); // return -1
$scope.selectedRegions.includes($scope.regionList[0]); // return false
$scope.checkTest = function(valueToFind, arrayToSearch){
for(var i = 0; i < arrayToSearch.length; i++){
if(arrayToSearch[i] == valueToFind.id){
return true;
}
}
};
我认为问题在于,
ng model=“selected”
实际上并没有指向每个区域的任何单独内容。AngularJS的解释是,$scope
上有一个选定的
属性。。。事实并非如此
相反,您应该为每个区域选择一个属性
,以便可以选中/取消选中各个区域,例如:
APP.controller('SettingsRegionController', function($rootScope, $scope, $http){
// Regions already selected
$scope.selectedRegions = JSON.parse(localStorage.getItem('userSubscribedRegions'));
// GET request
$http.get( 'http://unsasj-v2.originis.fr/wp-json/wp/v2/region?per_page=100').then(
// Sucess
function(response){
$scope.regionList = response.data;
$scope.regionList.forEach(function (region) {
region.selected = false;
$scope.selectedRegions.forEach(function (selectedRegion) {
if (selectedRegion.id == region.id) {
region.selected = true;
}
});
});
},
// En cas d'erreur
function(error){
console.log(error);
}
);
});
<li ng-repeat="region in regionFilteredList = (regionList | filter:{name : search}) track by region.id">
<ion-checkbox class="item-checkbox-right" ng-model="region.selected">
{{ region.name }}
</ion-checkbox>
</li>
在HTMLng model=“region.selected”
中,例如:
APP.controller('SettingsRegionController', function($rootScope, $scope, $http){
// Regions already selected
$scope.selectedRegions = JSON.parse(localStorage.getItem('userSubscribedRegions'));
// GET request
$http.get( 'http://unsasj-v2.originis.fr/wp-json/wp/v2/region?per_page=100').then(
// Sucess
function(response){
$scope.regionList = response.data;
$scope.regionList.forEach(function (region) {
region.selected = false;
$scope.selectedRegions.forEach(function (selectedRegion) {
if (selectedRegion.id == region.id) {
region.selected = true;
}
});
});
},
// En cas d'erreur
function(error){
console.log(error);
}
);
});
<li ng-repeat="region in regionFilteredList = (regionList | filter:{name : search}) track by region.id">
<ion-checkbox class="item-checkbox-right" ng-model="region.selected">
{{ region.name }}
</ion-checkbox>
</li>
在控制器中:
// Initialise selectAll as false
$scope.selectAll = false;
$scope.toggleSelectAll = function () {
$scope.regionList.forEach(function (region) {
region.selected = $scope.selectAll;
}
}
在对
toggleSelectAll
功能进行快速编辑后,Protozoid给出的答案对我有效。对于那些它可以帮助的人,有一个解决方案:
在视图中:我在ng change
指令中添加了一个参数,以便在触发toggleSelectAll
时获取复选框的当前状态(如果选中或未选中):
<ion-checkbox class="item-checkbox-right item-divider" ng-model="selectAll" ng-change="toggleSelectAll(selectAll)">
Select all
</ion-checkbox>
希望能有所帮助非常感谢!它用于检测复选框是否已选中,但您的
toggleSelectAll
功能对我不起作用:/我添加了ng change=“toggleSelectAll(selectAll)”
以获取复选框的状态,否则它将保持返回false。该函数只允许我取消选中所有复选框,但不允许检查所有复选框如果您在切换选择所有功能时首先添加控制台.log($scope.selectAll)
,您会得到什么结果?我只是在尝试查找您的答案时发现了错误:有一个$scope
,太抱歉了。这是我的代码:在视图中,我添加了一个参数ng model=“selectAll”ng change=“toggleSelectAll(selectAll)”
并在控制器中:$scope.toggleSelectAll=function(isChecked){console.log(isChecked);//如果($scope.regionList){$scope.regionList.forEach(function(region),则返回复选框true/false的状态{region.selected=isChecked;//错误是$scope.isChecked console.log(region.selected);//在返回undefined}}}}
很高兴听到这个消息,如果它解决了您的问题,请标记答案:)仅几秒钟我将在下面的答案部分复制我的消息,它就是不可读的
<ion-checkbox class="item-checkbox-right item-divider" ng-model="selectAll" ng-change="toggleSelectAll(selectAll)">
Select all
</ion-checkbox>
$scope.toggleSelectAll = function (isChecked) {
if($scope.regionList){
$scope.regionList.forEach(function (region) {
region.selected = isChecked;
});
}
}