Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Установка дефолтных значений формы (https://javascript.ru/forum/angular/57396-ustanovka-defoltnykh-znachenijj-formy.html)

deonis 02.08.2015 11:33

Установка дефолтных значений формы
 
День добрый.

Все время в проектах использовал 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 постоянно, сорри, но для меня они оказались на его ранней стадии изучения довольно важными.

Deff 02.08.2015 11:38

Цитата:

Сообщение от deonis
Можно как-то только во view после обновления формы сделать включенными выбранные перед отправкой радио-кнопки и чтобы слой с текстовым полем тоже был выбран?

Ну ежели кнопки вызывают какое то дествие по изменению контента, то либо эти действия выставлять на сервере(к примеру развертывания какого-то div, если кнопка чеканута) либо при загрузке повторно смотреть и кликать чеканутые кнопки скриптом программно(типо дважды, если радио - единожды, хотя несложно и нормальную обработку с выставлением атрибутов и вызовом соответствующего события сделать, имхо тренировка всегда к месту)

ksa 03.08.2015 08:27

Цитата:

Сообщение от deonis
Или мне надо полностью менять свое виденье в разработке и писать контроллер для данного функционала, где будет установка значений полей после загрузки, а не сразу в html-полях формы?

В хтмл ничего писать не нужно. :no: Все должно быть в модели.

ksa 03.08.2015 08:33

Цитата:

Сообщение от deonis
Если задавать значения формы из JS, то во время загрузки происходит секундный показ формы без значений, а потом они подставляются. Это я что-то не так сделал или оно будет все так и надо показывать формы целиком уже после загрузки всех данных?

Из букваря...
Цитата:

Использование двойных фигурных скобок хорошо работает в title элементе, но вы могли заметить, что на самом деле, фигурные скобоки на долю секунды отображаются пользователю при загрузке страницы. Лучшим решением было бы использовать ngBind или ngBindTemplate директивы, которые невидимы для пользователя при загрузке страницы:
http://angular.ru/tutorial/step_03

deonis 03.08.2015 09:06

Спасибо, ksa. Буду копать дальше :)


Часовой пояс GMT +3, время: 19:28.