AngularJS: область доступа из аккордеона bootstrap-ui

Я пытаюсь $наблюдать за изменением модели в аккордеоне ui-bootstrap. Привязка работает в представлении, но при изменении модели $watch не срабатывает.

http://plnkr.co/edit/DcoGT2?p=preview

Как получить значение $scope.myModel в контроллере?


person user2570109    schedule 10.07.2013    source источник


Ответы (1)


Используйте объект, а не примитив:

<div ng-controller="AccordionDemoCtrl">
  <accordion>
    <accordion-group heading="Static Header">
      <input ng-model="model.myModel"> {{ model.myModel }}
    </accordion-group>
  </accordion>
</div>

angular.module('plunker', ['ui.bootstrap']);
function AccordionDemoCtrl($scope) {
  $scope.model = {myModel: ''};
  $scope.$watch('model.myModel',function(){
    console.log($scope.model.myModel);
  })
}

Plunker

person Mark Rajcok    schedule 10.07.2013
comment
Это только что решило проблему для меня, но может ли кто-нибудь указать мне объяснение, почему примитив здесь не работает? - person henry; 29.05.2014
comment
@henry, вероятно, потому, что директива аккордеонной группы создает дочернюю область, поэтому дочерний элемент получает копию, а не ссылку. Для получения дополнительной информации см. области прототипа прототипного наследования в angularjs"> stackoverflow.com/questions/14049480/ - person Mark Rajcok; 05.06.2014