15.10.2013, 11:13
|
Интересующийся
|
|
Регистрация: 15.10.2013
Сообщений: 10
|
|
Isolated scope в select
Доброго времени суток!
Возникла проблема.
Решил я написать хорошую директиву для генерации и вывода сообщений валидации. Для корректной работы директива должна создавать себе изолированную область видимости. И все бы хорошо, но в таком случае перестает нормально работать ng-options в select.
Вот фидл всего этого безобразия (эффект видно, если раскомментировать "//scope: {}").
На stackoverflow.com были пара вопросов на эту тему, но к здравому и всех устраивающему решению так и не пришли.
Пост 1
Пост 2
В случае успешного решения обязательно выложу. Может и допилим общими усилиями )))
|
|
15.10.2013, 12:00
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
А в чем вопрос?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
15.10.2013, 12:27
|
Интересующийся
|
|
Регистрация: 15.10.2013
Сообщений: 10
|
|
Как сделать так, чтобы и директива и ng-options в select работали???
Как то так...
|
|
15.10.2013, 16:53
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Как вариант переписывать ngOptions
Но проще всего написать свою директиву без изолированного scope.
Попробуй объяснить на фига тебе scope изолировать
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 15.10.2013 в 17:00.
|
|
15.10.2013, 17:12
|
Интересующийся
|
|
Регистрация: 15.10.2013
Сообщений: 10
|
|
Как то так...
Идея в том, что сначала деректива генерирует список сообщений об ошибках.
Далее - при возникновении ошибки сообщение появляется, но как напоминание (допустим серый цвет шрифта).
При исправлении - исчезает.
При сабмите сообщения о допущеных ошибках становятся более навящивы (допустим, красятся в красный).
Если не использовать Isolated scope, то при возникновении ошибки на одном поле - срабатывают все сообщения.
|
|
15.10.2013, 18:59
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Вот неплохая статья по теме валидации форм.
http://habrahabr.ru/post/179473/
Пример из статьи 1 (стандартный валидатор)
Пример из статьи 2 (свой валидатор)
пример из статьи 3 (отключение submit для не валидных форм)
Я смутно представлю на фига нужны события, если только ради того чтобы валидацию после нажатия на submit сделать, то я не думаю что это удобно.
И даже пусть ошибки выводятся только при нажатии на submit, тоuгда пусть submit бросит событие, renderError его обработает и если есть ошибка то выведет предупреждение если нет ошибки то спрячет предупреждение. Никаких событий в ответ renderError посылать не должен, submit и без событий может принять решение об отправке формы на основании .$invalid. Изолированный scope нафик нигде ненужен
Сорри если не понимаю задачу.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 15.10.2013 в 19:29.
|
|
15.10.2013, 19:21
|
Интересующийся
|
|
Регистрация: 15.10.2013
Сообщений: 10
|
|
Статью читал, но она обзорная...
События в директиве именно для этого они и нужны, но, даже если их удалить, суть не меняется. Изоляция нужна так или иначе...
И, что самое противное, проблема только с ng-options. Переписать не вариант - сильно уж она хитро сделана.
Нужен какой то обходной маневр, вот только я не знаю какой
А если судить по stackoverflow - вообще мало кто знает или знают, но молчат ))))
|
|
15.10.2013, 19:47
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Тебе никто и не ответит,
в примере http://jsfiddle.net/drRKk/ чо попало написано.
К примеру вмето того чтобы просто вызвать метод requireErrorEnable(), ты используешь события почему то
scope.$emit("requireErrorEnable");
scope.$on("requireErrorEnable",function(){});
Если делать это через жопу через события то естественно requireErrorEnable сработает во всех рендерах, а если как функцию то только в том в какой должен. Пока что я вижу что ты используешь изолированный scope только для того чтобы вызывать requireErrorEnable через анальное отверстие, так как изолированный scope позволяет срабатывать событию в рамках одной директивы а не расползаться по всему scope формы. А нужно лиш отказаться от событий внутри директивы, и необходимость изолировать scope исчезнет
Я понять не могу что ты хочешь добится и ничего особо не менял, просто убрал события и изолированный scope чтобы показать что и без него error выводится только в редактируемом input http://jsfiddle.net/xtBXe/
В общем вывод такой что я по прежнему не вижу оснований для изоляции scope.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 15.10.2013 в 20:43.
|
|
15.10.2013, 20:55
|
|
Новичок на форуме
|
|
Регистрация: 12.10.2013
Сообщений: 3
|
|
Сообщение от Olival888
|
Доброго времени суток!
Возникла проблема.
Решил я написать хорошую директиву для генерации и вывода сообщений валидации. Для корректной работы директива должна создавать себе изолированную область видимости. И все бы хорошо, но в таком случае перестает нормально работать ng-options в select.
Вот фидл всего этого безобразия (эффект видно, если раскомментировать "//scope: {}").
На stackoverflow.com были пара вопросов на эту тему, но к здравому и всех устраивающему решению так и не пришли.
Пост 1
Пост 2
В случае успешного решения обязательно выложу. Может и допилим общими усилиями )))
|
Не ясно для чего вообще огород с директивой городить. Гораздо проще подобная задача решается использованием базовых средств angular для работы с формой (классы ng-valid, ng-invalid, ng-dirty и подобные).
|
|
16.10.2013, 11:48
|
Интересующийся
|
|
Регистрация: 15.10.2013
Сообщений: 10
|
|
Сообщение от DjDiablo
|
Тебе никто и не ответит,
в примере http://jsfiddle.net/drRKk/ чо попало написано.
К примеру вмето того чтобы просто вызвать метод requireErrorEnable(), ты используешь события почему то
scope.$emit("requireErrorEnable");
scope.$on("requireErrorEnable",function(){});
Если делать это через жопу через события то естественно requireErrorEnable сработает во всех рендерах, а если как функцию то только в том в какой должен. Пока что я вижу что ты используешь изолированный scope только для того чтобы вызывать requireErrorEnable через анальное отверстие, так как изолированный scope позволяет срабатывать событию в рамках одной директивы а не расползаться по всему scope формы. А нужно лиш отказаться от событий внутри директивы, и необходимость изолировать scope исчезнет
Я понять не могу что ты хочешь добится и ничего особо не менял, просто убрал события и изолированный scope чтобы показать что и без него error выводится только в редактируемом input http://jsfiddle.net/xtBXe/
В общем вывод такой что я по прежнему не вижу оснований для изоляции scope.
|
Спасибо!!!
Вроде помогло!
Осталось только попробовать в боевых условиях )
|
|
|
|