Показать сообщение отдельно
  #22 (permalink)  
Старый 30.05.2013, 20:03
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Ещё один опыт интересный

Я задался вопорсом в каком порядке срабатывают watch в scope, при учёте что scope неизолирован.

Впринципе нечего сверхестественного судя по логу watch срабатывают сверху внизсогласно вложенности деректив
Если watch неизменил значение(выставил такое же как и было) тогда лог становится пустым, нет измененией watch несрабатывают поэтому лог пустой

Также нет никакого значения откуда пришло изменение

Я нехотел прослушивать log, чтобы неполучить бесконечную рекурсию, ведь каждый watch мняет лог, поэтому witch слушает только hello.

<!doctype html>
<html ng-app="myApp">
  <head>

     <style>  
        test2{
            padding-left:50px;
            display:block;
        }
    </style>

    <script src="http://code.angularjs.org/1.1.5/angular.min.js"></script>
    <script language="javascript" type="text/javascript">
  
      //Обьявим модуль
      var myApp=angular.module('myApp', []);

	  //создадим дерективу
      myApp.directive('test',function(){                        
        return {
			restrict:"E",
			scope:{},
			controller:function($scope){
				$scope.hello=0;
				$scope.log=[];

				$scope.$watch ('hello', function(){
					$scope.log.push('main');
				});

			}
	   	}          
      });



	  //создадим дерективу
      myApp.directive('test2',function(){                        
        return {
			restrict:"E",

			controller:function($scope,$element,$attrs){
				$element.bind('click',function(e){

					$scope.hello=$attrs['name'];					

					//сбросим лог
					$scope.log=[];
	
					//опубликуем изменения
					//$scope.$digest();
					$scope.$apply();


					e.stopPropagation();
				})

				$scope.$watch ('hello', function(){
					$scope.log.push($attrs['name']+" run");
				});
			}
	   	}          
      });


    </script>
  </head>
    
  <body >    
	<h3> ClickZone </h3>
    <test>
	    <test2 name="t1">(click t1)</test2>
	    <test2 name="t2">(click t2)</test2>
	    <test2 name="t3">(click t3)</test2>
	    <test2 name="t4">
		    <test2 name="t4-1">(click t4-1)</test2>
		    <test2 name="t4-2">(click t4-2)</test2>
		    <test2 name="t4-3">(click t4-3)
			    <test2 name="t4-3-1">(click t4-3-1)</test2>
			    <test2 name="t4-3-2">(click t4-3-2)</test2>
			</test2>
		</test2>
		 <test2 name="t5">(click t6)</test2>
		<br/><br/>
		<h3> LogZone </h3>
		{{log}}
		<br/><br/>
		<h3>hello= {{hello}} </h3>		
	</test>
  </body>   
	

</html>
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 30.05.2013 в 21:19.
Ответить с цитированием