2016-07-13 12 views
0

Я использую angularstrap popovers, чтобы создать простой popover, отображающий дату/время.Как заставить изменения во внутренней области директивы angularstrap popover обновить область родительского контроллера?

Вот сам поповер

<div class= "form-group form-group-sm">                                           
    <button type= "button" class= "btn" id= "start-select-btn"                                     
     data-placement= "bottom"                                            
     data-template= "/static/partials/popover/start.html"                                     
     data-auto-close= "true"                                                                                         
     bs-popover                                                
    >                                                   
     Start <span class= "caret"></span>                                          
    </button>                                                 
</div> 
<button ng-click= "check()"></button> 

А вот шаблон, который он тянет в. (Start.html)

<div class= "popover" id= "start-menu">                                            
    <div class= "arrow"></div>                                              
    <div class= "popover-content">                                             
     <input type= "text" class= "form-control" uib-datepicker-popup ng-model= "startDate"/>                            
     <uib-timepicker ng-model= "startTime"></uib-timepicker> 
    </div>                                    
</div>                                                   

Поэтому в основном то, что вы щелкаете и сборщик данных/таймер выбирается. То, что я не могу понять, это то, почему моя область значений не обновляется со значениями datepicker. Вот что я имею в виду ...

Предположим, я что-то изменил внутри дампикера, который падает. Тогда я нажимаю мой «чек()» метод, определенный внутри моего контроллера

$scope.check = function() { 
    alert($scope.startDate); 
} 

Это предупреждает, что я изначально установить свой STARTDATE в. Изменение значения в поле ввода не изменяет значение области startDate. Более того, как только я закрываю popover и снова открываю, значение сбрасывается до начального значения.

Для меня это похоже на проблему с внутренней областью действия этой директивы popover, которая не меняет область действия родителя.

Я попытался обновить шаблону немного

<div class= "popover" id= "start-menu">                                            
<div class= "arrow"></div>                                              
<div class= "popover-content">                                             
    <input type= "text" class= "form-control" uib-datepicker-popup ng-model= "$parent.startDate"/>                            
    <uib-timepicker ng-model= "$parent.startTime"></uib-timepicker> 
</div>                                    

НГ-модель в настоящее время "$ parent.startDate" вместо того, чтобы просто "STARTDATE".

Это, казалось, было незначительным положительным эффектом. Когда я закрываю popover, ранее введенное значение для datepicker теперь сохраняется.

Однако, когда я выполняю свою функцию «check()» раньше, предупреждаемое значение ($ scope.startDate) остается неизменным.

Я считаю, что эта проблема связана с самим popover, а не с моим datepicker/timepicker, потому что они работали с областью в том виде, в котором я намереваюсь, прежде чем я попытался поместить их в шаблон для popover.

Итак, как мне получить внутреннюю область этого popover, чтобы зеркально отразить родительскую область моего контроллера?

редактировать: Я пытался переходящий в сферу на «BS-пирог» атрибут как этот

... 
bs-popover= "startScope" 
... 

, а затем внутри моего контроллера

$scope.startScope = { 
    startDate : $scope.startDate 
}; 

это не сработало .. когда я нажал моя контрольная кнопка для проверки, предупредительное значение все еще было тем, что первоначально было унаследовано от родительской области.

+0

Можете ли вы создать исполняемый фрагмент с вашей проблемой? – fracz

+0

К сожалению, я не могу. За брандмауэром. – Zack

+0

Я имел в виду JSFiddle или что-то в этом роде :-) – fracz

ответ

0

Я обошел это, сделав что-то вроде этого.

$scope.start = { 
    startDate : $scope.startDate, 
    startTime : $scope.startTime 
} 

А потом в шаблоне

ng-model = "$parent.start.startDate" 

Не имеет большое объяснение, почему это работает, но this post и this post привели меня к земле обетованной.

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

  • Нет связанных вопросов^_^