2016-04-14 5 views
0

Когда я обновляю массив $scope.d через $mdDialog, представление, в котором ng-повторы данные не обновляются. Я попытался с помощью $scope.$apply() и $scope.digest(), но я по-прежнему получаю сообщение об ошибке «$scope.digest() уже идет»Угловой ng-repeat не обновляется в представлении

Html

  <md-list-item ng-click="showPrompt($event)" > 
       <a> 
       <md-item-content md-ink-ripple layout="row" layout-align="start center"> 
        <div class="inset"> 
        <ng-md-icon icon="note_add"></ng-md-icon> 
        </div> 
        <div class="inset">Add Deck 
        </div> 
       </md-item-content> 
       </a> 
      </md-list-item> 

<div ng-controller="deck" id="curDeck"> 
     <md-list-item class="md-3-line" ng-repeat="deck in d" ng-click="showDeck($event, $index).bind(this)"> 
     <div class="md-list-item-text" layout="column"> 
     <td>{{deck.deckname}}</td> 
     </div> 
    </md-list-item> 
</div 

Контроллер

var app = angular.module("app",['ngMaterial', 'ngMdIcons']) 

.controller("deck", function($scope, $mdDialog, $mdMedia) { 

$scope.d = [ 
    { 
    deckname: 'NewDeck', 
    deck: [ 
     {front: "a cappella", back: "without accompaniment"}, 
     {front: "avuncular" , back: "like an uncle"}, 
     {front: "collusion" , back: "conspiracy"}, 
     {front: "Javascript", back: "pain in the ass"}, 
     {front: "Angular", back: "$scope is fun to work with"} 
    ] 
    } 
    ]; 
    $scope.showPrompt = function(ev) { 
    // Appending dialog to document.body to cover sidenav in docs app 
    $scope.confirm = $mdDialog.prompt() 
      .title('Add a Deck') 
      .textContent('Your decks are belong to us') 
      .placeholder('deck name') 
      .targetEvent(ev) 
      .ok('Okay!') 
      .cancel('Cancel'); 

    return $mdDialog.show($scope.confirm).then(function(name){ 
     console.log(name); 
     $scope.d.push({ 
     deckname: name, 
     deck:[] 
     }); 
    }); 
    }; 

}; 
+0

Я создал plunker для вас, но не может заставить его работать пока :(https://plnkr.co/edit/iuiSPoCb13U0UNnaHoX4?p = preview –

ответ

0

Проблема, кажется, ниже код

return $mdDialog.show($scope.confirm).then(function(name){ 
    console.log(name); 
    $scope.d.push({ 
    deckname: name, 
    deck:[] 
    }); 
}); 

возвращение $ mdD ialog преобразует вас в $ showPrompt от функции к обещанию. Избавьтесь от оператора return.

Возможно, вы должны сохранить $ scope.confirm как локальную переменную, например, var confirm. Вам не нужен доступ непосредственно к функции подтверждения из области действия, как раз в этой функции.

Так, вероятно, код должен быть таким:

$scope.showPrompt = function(ev) { 
// Appending dialog to document.body to cover sidenav in docs app 
var confirm = $mdDialog.prompt() 
     .title('Add a Deck') 
     .textContent('Your decks are belong to us') 
     .placeholder('deck name') 
     .targetEvent(ev) 
     .ok('Okay!') 
     .cancel('Cancel'); 

$mdDialog.show(confirm).then(function(name){ 
    console.log(name); 
    $scope.d.push({ 
    deckname: name, 
    deck:[] 
    }); 
}); 
+0

Не повезло, пока не обновляется – ZodiacGXP

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