2016-12-20 2 views
0

Я пытаюсь связать две директивы datepicker. Я передаю модель в одну из директив, и мне нужно запустить несколько методов, когда значение изменяется, но когда значение меняет область. $ Watch в функции связывания не запускается. Я пытался решить эту проблему в течение последних двух дней безрезультатно ... все, что я бросаю, не работает. Может кто-то взглянуть и объяснить, что не так?

Я настроить plunker http://plnkr.co/edit/VTSElDjniyN8wRwsuT1T?p=preview

Jacvascript код ниже

UPDATE 21/12/2016 обновленную ссылку plunker как первичное звено было неправильным.

angular.module('ui.bootstrap.demo').directive('endDatepicker', function() { 
return { 
    scope: { 
     model: "=", 
     endDate: "=", 
    }, 
    templateUrl: 'datepicker-template.html', 
    link: function(scope, element, attr) { 
     scope.$watch('endDate', function(newValue,oldValue){ 
      console.log("Watch fired" + scope.endDate) 
      scope.dateOptions.minDate = scope.endDate; 
     },true) 


    scope.popupOpen = false; 
     scope.openPopup = function($event) { 
      $event.preventDefault(); 
      $event.stopPropagation(); 
      scope.popupOpen = true; 
     }; 

     scope.dateOptions = { 
     startingDay: 1, 
     minDate: moment.utc()._d 
     } 
     scope.open = function($event) { 
     $event.preventDefault(); 
     $event.stopPropagation(); 
     scope.opened = true; 
     }; 

    } 
}; 
}); 
+1

ваш plunkr и код выше не совпадают. –

+0

попробуйте удалить истинную опцию в конце часов, потому что, насколько я вижу, endDate не является объектом. –

ответ

0

Потому что вы передаете model как к directives, обновления не отражены в одном, когда один из них меняется, так как model сидит на directive scope, а не parent scope, вместо того, чтобы наблюдать модель в одной директиве поднять событие, когда модель изменения в одном и наблюдать за этим событием во второй модели и делать свою работу там:

Первая директива:

link: function(scope, elm, attrs) { 

    elm.bind('blur', function() { 
     var currentValue = elm.val(); 
     scope.$emit('FIRST_DATE_UPDATED', currentValue); 
    }); 
} 

И во второй директиве:

link: function(scope, elm, attrs) { 

    scope.$on('FIRST_DATE_UPDATED', function(e, data){ 
     var newDateValue = data; 
     //do your stufdf here 
    }); 
} 
+0

Спасибо всем за ваш вклад. Да, действительно, ссылка была неправильной, это был мой первый вопрос в стеке, так что мои руки несколько шаткие :) Ясер поблагодарил за открывающий глаза. Я понял, что моя директива end-datepicker была ограничена областью ng-контроллера, поэтому она сидела в своей изолированной scope ... Мне удалось теперь получить объем. $ watch метод для работы и поймать новое значение, однако я попробовал ваше предложение вместе с решением $ watch, чтобы посмотреть, как я могу его использовать, если возникают обстоятельства, но я не могу заставить его работать , Правильная ссылка http://plnkr.co/edit/VTSElDjniyN8wRwsuT1T?p=preview – MrPZzZ

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