2015-12-22 3 views
1

У меня есть флажки в приложении. Когда я нажимаю флажок, объект, который я проверил, добавляется в массив. Но когда я нажимаю еще один флажок (не отмечен), объект не удаляется в массиве. Как я могу это исправить?Как добавить объект, который отмечен в массиве?

HTML Источник:

<ion-list ng-repeat="option in question.SurveyOptions "> 
    <li class="item item-checkbox checkbox-royal "> 
    <label class="checkbox"> 
     <input type="checkbox" ng-checked="MyAnswers.indexOf(option)!=-1" ng-click="toggleCheckAnswer({OptionId:option.Id,QuestionId:question.Id})"> 
    </label> 
    <div class="item item-text-wrap"> 
     {{option.OptionsName}} 
    </div> 
    </li> 
</ion-list> 

Контроллер:

$scope.MyAnswers = []; 
$scope.toggleCheckAnswer = function(Answer) { 
    if ($scope.MyAnswers.indexOf(Answer) === -1) { 
    $scope.MyAnswers.push(Answer); 
    } else { 
    $scope.MyAnswers.splice($scope.MyAnswers.indexOf(Answer), 1); 
    } 
}; 

В функции Ответ включают только OptionId и QuestionID.

Как найти индекс {OptionId:1,QuestionId:1}?

ответ

1

Попробуйте как этот

var index = $scope.MyAnswers.map(function(x) { 
    return x.OptionId + "#" + x.QuestionId; 
}).indexOf(Answer.OptionId + "#" + Answer.QuestionId); 
console.log(index); 
0

Вы не можете использовать IndexOf найти OBJETS в массиве, нужно перебрать массив:

$scope.toggleCheckAnswer=function(Answer) { 
    var index = -1; 
    for (var i=0; i<$scope.MyAnswers.length; ++i) { 
    var answer = $scope.MyAnswers[i]; 
    if ($scope.MyAnswers[i].OptionId == Answer.OptionId && 
     $scope.MyAnswers[i].QuestionId == Answer.QuestionId) { 
     index = 1; 
     break; 
    } 
    } 
    if (index === -1) { 
    $scope.MyAnswers.push(Answer); 
    } else { 
    $scope.MyAnswers.splice(index, 1); 
    } 
}; 
+0

Я попытался код @Anik «s, оно работает. – Mesuttt1907