Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查对象是否在ng repeat中的另一个对象数组中_Javascript_Angularjs_Ionic Framework - Fatal编程技术网

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>
在HTML
ng 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;
        });
    }
}