Angular: Доступ к соседним scope или другой способ управления "соседями"

Есть задача, ответ на которую я нашёл на StackOverflow. Там есть классный совет использовать сервисы для шэйринга. Однако моя задача чуть более специфична, чем необходимость иметь доступ к "соседям".

Схема моего кейса:
- Scope 1 < скоуп контроллера
--- Scope 2 < 1-й скоуп ngRepeat
--- Scope 3 < 2-й скоуп ngRepeat
--- Scope 4 < 3-й скоуп ngRepeat
--- Scope 5 < 4-й скоуп ngRepeat

В каждом ngRepeat есть INPUT с ngModel и ngChange, ссылающийся на функцию, которая валидирует содержимое инпута. В каждом ngRepeat свой инпут и каждый валидируется. По умолчанию все инпуты, начиная со второго скрыты, и появляться должны только если введены валидные данные в предыдущем инпуте.

И вот я ищу способ как лучше и аккуратнее всего контролировать видимость ngRepeat'ов...
  • Вопрос задан
  • 2824 просмотра
Пригласить эксперта
Ответы на вопрос 3
alexiusp
@alexiusp
senior frontend developer
Ну а чем ng-Show не устраивает?
Создаёте массив флагов валидности соразмерный массиву использованному в ng-Repeat и ставите каждому элементу атрибут ng-Show. Примерно как-то так:
<div ng-repeat="item in items" ng-Show="isValid[$index]">
...
</div>

Функция валидации должна ставить соответствующий флаг в истину, когда можно показывать следующее поле.
Ответ написан
Комментировать
А для унификации в дополнение к предыдущему ответу @alexiusp я бы предложил функции валидации оформить единообразно в том же массиве, и вызывать процесс валидации отдельной процедурой с параметром $index, которая и вызывала бы checkIfValid[i] и присваивала бы ее результат следующему элементу булева массива isValid[i+1].
Ответ написан
Комментировать
@readmore
Как вам вариант завернуть каждый элемент ngRepeat в объект?
т.е.
- Scope 1 < скоуп контроллера
--- Scope 2 < 1-й скоуп ngRepeat object.profile
--- Scope 3 < 2-й скоуп ngRepeat object.contacts
--- Scope 4 < 3-й скоуп ngRepeat object.anythingelse

тогда в любом из скоупов вы обращаетесь к предыдущему через object
находясь в ng-repeat="contact in object.contacts"
вы используете ng-if="!!object.profile.name"

Пример на Plunker

Сообщите, правильно ли я понял цель. Спасибо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы