$ scope.myVariable не обновляется в контроллере для angular -ui bootstrap modal

На мой взгляд, у меня есть вход, диапазон и одна кнопка:

<script type="text/ng-template" id="myTemplate.html">
  <input type="text" ng-model="phoneNumber">
  <span>{{ phoneNumber}}</span>
  <input type="button" ng-click="click()">
</script>

При вводе текстового поля содержимое span обновляется как ожидаемое. Но при нажатии кнопки phoneNumber не обновляется внутри контроллера:

app.controller('myPopopCtrl', ['$scope', '$modalInstance',
  function ($scope, $modalInstance) {
      $scope.phoneNumber= '';    

      $scope.click = function() {
        alert($scope.phoneNumber); // alerts only ''
      };

Есть ли какая-то ошибка newbe, которую вы можете сделать в angular, которая делает материал не обновляющимся на $scope внутри контроллера?

Есть ли какие-то проблемы с областью видимости с angular -ui modal Мне нужно знать?

Edit:

Кажется, что phoneNumber создается в двух областях. Один раз в области синей стрелки, где phoneNumber: '' и один раз в области детства на красной стрелке. Представление использует phoneNumber в области дочерних элементов, а контроллер использует phoneNumber в родительской области...

enter image description here

Почему созданы две области?

Ответы

Ответ 1

ng-include создает новую область. Поэтому передайте объект вместо строки

$scope.phone={number:null}

Затем шаблон выглядит как

<script type="text/ng-template" id="myTemplate.html">
  <input type="text" ng-model="phone.number">
  <span>{{ phone.number}}</span>
  <input type="button" ng-click="click()">
</script>

Посмотрите на wiki, чтобы понять проблемы с прототипным наследованием.

Ответ 2

Была та же проблема, и после нескольких экспериментов я решил написать

<input type="text" ng-model="$parent.phoneNumber">

Таким образом, вход привязан к синему диапазону, который именно вы хотели.

Другой способ - инициализировать номер телефона с истинным значением. Попробуйте $scope.phoneNumber= '123'; - отлично работает для меня.

Angular, похоже, подходит к дереву областей, ищущему атрибут для привязки. Если ничего не найдено - оно связывается с самой внутренней областью, красной областью на вашем рисунке. Как следует из другого ответа - эта красная область создается ng-include, как дочерний элемент контроллера $scope.