2015-02-14 3 views
0

При отправке $ Modal (modalInstance) Я обновляю массив в области ($ scope.expenses), вид имеет привязку к объекту, datatable использует «затраты», как данные. Я вижу, что $ scope.expenses обновляется при отладке, а новый элемент вставлен, но в таблице и в {{cost.length}} bind я не вижу обновления. Я прочитал много вопросов об этой проблеме. Вставка выполняется с угловой стороны, поэтому, если я понимаю, применение \ digest не требуется.Связывание области не обновляется после изменения переменной видимости

Я пробовал:

  • вызова $ объем $ переваривать \ $ объем $ применяется() после нажатия (Результирующая ошибка, гидролизат уже идет)
  • обмотать толчок в функции.. в $ scope. $ apply (function). Те же ошибки, переваривать уже в процессе
  • Использования $ таймаута, толчок получит откладывается на следующий дайджест цикла - вид не не получает обновленный

Ни один из приведенных выше вариантов решить эту проблему.

View (я вижу длину до толчка, так что привязка правильно определена в представлении, вот почему я не вставить весь вид):

<div class="row"> 
    <div class="ibox-content col-lg-10 col-lg-offset-1" ng-controller="LiveCtrl"> 
     {{expenses.length}} 


     <div class="col-md-1" ng-controller="LiveCtrl"> 
      <button class="btn btn-link" ng-click="openAddExpenseModal()"> 
       <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add Expense 
      </button> 
     </div> 
    </div> 
</div> 

код контроллер, где я нажимаю на расходы новый пункт:

modalInstance.result.then(function (newExpense) { 
    ExpenseService.addExpense(newExpense).then(function (id) { 
      console.log(id); 
      $scope.expenses.push(newExpense); 
     }, function (rejectData) { 
      console.log(rejectData); 
     }); 
    }, function (msg) { 
     console.log('Modal dismissed at: ' + new Date() + 'Message - ' + msg); 
    }); 
+0

Мы будем должны видеть больше кода, чтобы выяснить, что случилось. Можете ли вы разместить соответствующий код, где вы используете '{{costs.length}}'? –

+0

Обновленный вопрос, вы можете увидеть весь div, который имеет этот контроллер. Я не думаю, что проблема есть, потому что я вижу привязку, которая просто не обновляется. –

+0

Не могу понять, почему это не должно работать. Я создал скрипку (минус все звонки AJAX), которые, кажется, работают - http://jsfiddle.net/HB7LU/10996/ –

ответ

1

проблема заключается в том, что вы используете контроллер дважды, и в результате создавая две области и, следовательно, два массива:

После того, как здесь: <div class="ibox-content col-lg-10 col-lg-offset-1" ng-controller="LiveCtrl">

И второй раз здесь: <div class="col-md-1" ng-controller="LiveCtrl">

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

Что вам нужно сделать, это удалить последнюю декларацию контроллера, создавая:

<div class="row"> 
    <div class="ibox-content col-lg-10 col-lg-offset-1" ng-controller="LiveCtrl"> 
     {{expenses.length}} 


     <div class="col-md-1"> 
      <button class="btn btn-link" ng-click="openAddExpenseModal()"> 
       <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add Expense 
      </button> 
     </div> 
    </div> 
</div> 
+0

Как я пропустил это ... Спасибо! Раньше они были на разных контроллерах, и рефакторинг заставлял меня делать эту проблему. –

+0

@OrGuz Случается для всех нас :) –

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