У меня есть динамически список строили тестов:Как добавить класс в div родителя родителя в Angular JS?
<script id="TestsTemplate" type="text/ng-template">
<article class="tests-main">
<section class="tests">
<div class="test" ng-repeat="test in tests">
<p>Question {{ test.number }}:</p>
<div ng-repeat="answer in test.answers">
<div ng-repeat="(key, value) in answer">
<p><button ng-click="processAnswer(value, $event)" class="btn" >○ {{ key }}</button></p>
</div>
</div>
</div>
</article>
</script>
, и я хочу, чтобы добавить класс к DIV (класс = «тест»), в котором была нажата кнопка.
Я знаком только с JQuery, и я могу думать только такой подход:
$scope.processAnswer = function(isRight, event) {
isRight ? $scope.count++ : $scope.count--;
event.target.parentNode.parentNode.parentNode.addClass('hide');
}
Как сделать это в угловом стиле?
РЕДАКТИРОВАТЬ: Мое решение:
ng-class использования и $index:
<div ng-class="($index==selectedIndex) ? 'hide' : 'test'" ng-repeat="test in tests">
Контроллер:
$scope.selectedIndex = -1;
$scope.processAnswer = function(isRight, index) {
isRight ? $scope.count++ : $scope.count--;
$scope.selectedIndex = index - 1; //$index starts at 0;
}
, где находится index
test.number
Вероятно, следует использовать директиву. В качестве альтернативы вы можете использовать 'ng-class' и on' ng-click' установить переменную на 'test' – Tristan
@Tristan Есть разница? Если я манипулирую DOM так, но в директиве, будет ли это угловым способом? – Infated
Матрицы Dom должны не существовать в контроллерах, службах или слое представления. Причина в том, что «чистое разделение проблем». Директивы являются многоразовыми, проверяемыми и более легкими для обработки зависимостей. Это зависит от того, насколько важны эти методы для вашего проекта. Как я уже упоминал, вы можете легко использовать 'ng-class' в шаблоне, даже не используя контроллер, но это не рекомендуется по указанным выше причинам. – Tristan