День добрый.
Все время в проектах использовал JQuery и тут решил, что пора переходить к MVC и в javascript. Начал небольшой тестовый проект и сразу возникла проблема с пониманием. Прошу подсказать как решить возникшую для меня сложность.
Есть блок с двумя радио-кнопками, которые по умолчанию не отмечены. Ниже слой с текстовым полем. Слой скрыт, пока не будет выбрана одна из радио-кнопок. Упрощенный код ниже:
<div ng-app>
<div class="form-group">
<label class="radio-inline">
<input type="radio" name="p_type" value="1" ng-model="p_type" required> один
</label>
<label class="radio-inline">
<input type="radio" name="p_type" value="2" ng-model="p_type" required> два
</label>
</div>
<div class="form-group" ng-show="p_type > 0">
<input type="text" name="name" value="" required>
</div>
</div>
Я добавил ng-app, ng-model="p_type" кнопкам и ng-show="p_type > 0" скрытому полю.
В итоге, после загрузки формы все работает. Нажимаю на кнопку — появляется блок.
1. Первая сложность у меня появилась после того, как форма была отправлена на сервер и вернулась с какой-то ошибкой или же зашли в эту форму для редактирования сущности.
Сложность непосредственно в установке какой-то кнопке, что она отмечена и соответственно чтобы слой с текстовым полем тоже показывался. Сначала пытался с помощью серверного языка просто добавить checked="checked", но Angular это не замечает и оставляет радио-кнопки формы не отмеченными. Затем нашел возможность установить с помощью серверного языка ng-checked="true". Кнопки становятся уже включенными, но блок с текстовым полем не появляется.
Можно как-то только во view после обновления формы сделать включенными выбранные перед отправкой радио-кнопки и чтобы слой с текстовым полем тоже был выбран?
Или мне надо полностью менять свое виденье в разработке и писать контроллер для данного функционала, где будет установка значений полей после загрузки, а не сразу в html-полях формы?
2. Из первого вопроса вытекает второй вопрос. У меня не standalone-приложение, а «банальный» сайт, но я хочу использовать Angular вместо JQuery. Мне заполнение значений полей после загрузки формы можно задавать через их вставку сразу в html-теги <input type="text" name="name" value="<?=$text?>" required>. Или все-таки лучше переходить на полное использование Angular и задавать дефолтные значения загруженной формы через JS?
3. Из второго вопроса вытекает третий
Если задавать значения формы из JS, то во время загрузки происходит секундный показ формы без значений, а потом они подставляются. Это я что-то не так сделал или оно будет все так и надо показывать формы целиком уже после загрузки всех данных? В частности если блоку с текстовым полем установить класс hidden и он будет скрытым при загрузке или же style="display:none;", то блок будет скрытый при загрузке, но констуркция ng-show="p_type > 0" не покажет его при выборе радио-кнопки.
Вопросы скорей всего нубские для людей, что работают с Angular постоянно, сорри, но для меня они оказались на его ранней стадии изучения довольно важными.