2013-06-20 4 views
0

HTML

<div data-select > 
    <div data-set-tip tipit='selecting(tips)' ></div> 
    <div data-show-tip headsup='selectingtips' ></div> 
</div> 

JS

directive.select= function(){ 
    return:{ 
     restrict:'A', 
     controller:function($scope){ 
      $scope.selectingtips = ''; 
      $scope.selecting = function(tips){ 
       $scope.selectingtips = tips 
      } 
     } 
    } 
} 

directive.setTip = function(){ 
    return { 
     restrict:'A', 
     scope:{ 
      tipit:'&' 
     }, 
     link:function(scope,element,attrs){ 
      element.on('mousestop',function(){ 
       scope.tipit({tips:'some tips'}) 
      }) 
     } 
    } 

} 

directive.showTip = function(){ 
    return { 
     restrict:'A', 
     scope:{ 
      headsup:'&' 
     }, 
     link:function(scope,element,attrs){ 
      scope.$watch('headsup',function(){ 
       alert('changed') 
      }) 
     } 

    } 
} 

я хочу, когда остановка мыши в директиве setTip переменной selectingtips родительской директивы будет установлена ​​на то, и директива showTip всегда прислушивается к изменению selecttips, а при изменении происходит смена предупреждения.

проблема

при обновлении страницы она будет предупреждать изменения немедленно, и когда я перестану мышью на директиву setTip, ничего не происходит. примечание: selecttips действительно изменился, когда мышь остановилась в директиве setTip.

что я делаю неправильно?

вот plunker link

+0

Можете ли вы предоставить plunkr или скрипку, пожалуйста? – Narretz

+0

проверить плункер – paynestrike

ответ

3

Чтобы предотвратить $watch от стрельбы на странице загрузки вы должны сравнить старые и новые значения модели вы смотрите:

scope.$watch('headsup',function(newVal, oldVal){ 
    if(newVal != oldVal) 
     alert('changed') 
}) 

Смотрите обновленный плункер: http://plnkr.co/edit/5kJSZtVA9a8o4tRdnPaT?p=preview

+0

Чтобы предотвратить нежелательный обжиг при загрузке данных через ajax, мне пришлось также проверять oldVal на неопределенный (предполагается, что данные инициализируются с неопределенным значением для начала): if (newVal === oldVal || oldVal === undefined) return; – Daniel

Смежные вопросы