Isolated scope в select
Доброго времени суток!
Возникла проблема. Решил я написать хорошую директиву для генерации и вывода сообщений валидации. Для корректной работы директива должна создавать себе изолированную область видимости. И все бы хорошо, но в таком случае перестает нормально работать ng-options в select. Вот фидл всего этого безобразия (эффект видно, если раскомментировать "//scope: {}"). На stackoverflow.com были пара вопросов на эту тему, но к здравому и всех устраивающему решению так и не пришли. Пост 1 Пост 2 В случае успешного решения обязательно выложу. Может и допилим общими усилиями ))) |
А в чем вопрос?
|
Как сделать так, чтобы и директива и ng-options в select работали???
Как то так... |
Как вариант переписывать ngOptions
Но проще всего написать свою директиву без изолированного scope. Попробуй объяснить на фига тебе scope изолировать |
Как то так...
Идея в том, что сначала деректива генерирует список сообщений об ошибках. Далее - при возникновении ошибки сообщение появляется, но как напоминание (допустим серый цвет шрифта). При исправлении - исчезает. При сабмите сообщения о допущеных ошибках становятся более навящивы (допустим, красятся в красный). Если не использовать Isolated scope, то при возникновении ошибки на одном поле - срабатывают все сообщения. |
Вот неплохая статья по теме валидации форм.
http://habrahabr.ru/post/179473/ Пример из статьи 1 (стандартный валидатор) Пример из статьи 2 (свой валидатор) пример из статьи 3 (отключение submit для не валидных форм) Я смутно представлю на фига нужны события, если только ради того чтобы валидацию после нажатия на submit сделать, то я не думаю что это удобно. И даже пусть ошибки выводятся только при нажатии на submit, тоuгда пусть submit бросит событие, renderError его обработает и если есть ошибка то выведет предупреждение если нет ошибки то спрячет предупреждение. Никаких событий в ответ renderError посылать не должен, submit и без событий может принять решение об отправке формы на основании .$invalid. Изолированный scope нафик нигде ненужен Сорри если не понимаю задачу. |
Статью читал, но она обзорная...
События в директиве именно для этого они и нужны, но, даже если их удалить, суть не меняется. Изоляция нужна так или иначе... И, что самое противное, проблема только с ng-options. Переписать не вариант - сильно уж она хитро сделана. Нужен какой то обходной маневр, вот только я не знаю какой А если судить по stackoverflow - вообще мало кто знает или знают, но молчат )))) |
Тебе никто и не ответит,
в примере http://jsfiddle.net/drRKk/ чо попало написано. К примеру вмето того чтобы просто вызвать метод requireErrorEnable(), ты используешь события почему то scope.$emit("requireErrorEnable"); scope.$on("requireErrorEnable",function(){}); Если делать это Я понять не могу что ты хочешь добится и ничего особо не менял, просто убрал события и изолированный scope чтобы показать что и без него error выводится только в редактируемом input http://jsfiddle.net/xtBXe/ В общем вывод такой что я по прежнему не вижу оснований для изоляции scope. |
Цитата:
|
Цитата:
Вроде помогло! Осталось только попробовать в боевых условиях ) |
Часовой пояс GMT +3, время: 20:48. |