Ещё один опыт интересный
Я задался вопорсом в каком порядке срабатывают 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>