 
			
				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.
	 | 
 
	
 
 Спасибо!!! 
Вроде помогло! 
Осталось только попробовать в боевых условиях )  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |