2016-01-13 1 views
2

J'ai une vue avec un élément de liste. Après que l'utilisateur a cliqué sur cet élément, le formulaire modal s'affiche. Lorsque l'utilisateur change de valeur et ferme modale, l'élément ne se met pas à jour.ng-bind ne se met pas à jour après la fermeture du formulaire modal

Vue:

<ion-view ng-controller="settingsController"> 
    <ion-content> 

    <div class="list"> 
     <ion-item class="item-icon-left" ng-click="openLanguageModal()"> 
      <i class="icon ion-chatboxes"></i> 
      {{'Language'| translate}} 

      <span class="item-note"> 
      <div ng-bind="choice"></div> 
      </span> 
     </ion-item> 

    </div> 
    </ion-content> 

    <script id="language-modal.html" type="text/ng-template"> 
    <div class="modal"> 
     <ion-header-bar> 
     <!-- <button class="button button-full button-dark" ng-click="closeLanguageModal()">{{'Done' | translate}}</button> --> 
     <button class="button button-clear button-positive pull-right" ng-click="closeLanguageModal()"> 
     {{'Done' | translate}} 
     </button> 
     </ion-header-bar> 
     <ion-content> 
     <ion-list> 
      <ion-radio ng-model="choice" ng-value="'en'"> English </ion-radio> 
      <ion-radio ng-model="choice" ng-value="'ru'"> Русский </ion-radio> 
     </ion-list> 
     </ion-content> 
    </div> 
    </script> 

</ion-view> 

Controller:

app.controller('settingsController', function($scope, $ionicModal) { 

    $ionicModal.fromTemplateUrl('language-modal.html', { 
    scope: $scope, 
    animation: 'slide-in-up' 
    }).then(function(modal) { 
    $scope.languageModal = modal; 
    }) 

    $scope.choice = "en"; 

    $scope.openLanguageModal = function() { 
    $scope.languageModal.show(); 
    } 

    $scope.closeLanguageModal = function() { 
    $scope.languageModal.hide(); 
    }; 

    $scope.$on('$destroy', function() { 
    $scope.languageModal.remove(); 
    }); 
}); 

Je ne comprends pas pourquoi les mises à jour de na pas ng-bind, aide s'il vous plaît

+0

essayer avec $ rootScope.choice = "en"; –

Répondre

1

Essayez d'utiliser:

$scope.model.choice = "en"; 

dans un contrôleur principal (donc à tous les autres contrôleurs de vue pourraient hériter cette information).

et en toute vue (réglages et langage modal) à modifier:

ng-model="model.choice" 

en raison de l'héritage prototypal ...

Ici, il est une démonstration de travail: http://codepen.io/beaver71/pen/XXaROB

+0

Super, merci! Mais pouvez-vous m'expliquer pourquoi le $ scope.choice ne fonctionne pas? – mreoer

+0

C'est ainsi que fonctionne l'héritage prototypique JS. Comme modal hérite de sa portée du contrôleur, il hérite de toutes les propriétés 'type non simple' (par exemple les objets) de la portée parente. – beaver

+0

voir aussi https://github.com/angular/angular.js/wiki/Understanding-Scopes – beaver