AngularJS / Ionique de routage à l'aide de $stateProvider - contrôleur n'est pas le rechargement de la deuxième fois qu'un état est appelé

Question D'Origine

Je suis le développement d'une application mobile à l'aide de l'Ionic Framework et AngularJS et je vais avoir des problèmes avec les contrôleurs de ne pas recharger une fois qu'ils ont été initialisés.

L'un des transitions d'état (de 'app.postbox-details' à 'app.audit-questions') doit passer un paramètre à la 'app.audit-questions' contrôleur mais ce contrôleur ne pas se mettre à jour avec le nouveau paramètre car il n'est pas de rechargement.

Exemple De Code

app.js fichier - config

angular.module('sf-maintenance', ['ionic', 'starter.controllers', 'starter.services', 'ngCordova'])           
.config(function ($stateProvider, $urlRouterProvider, $httpProvider) {
    $stateProvider
       .state('home', {
           url: '/home',
           templateUrl: 'templates/home.html',
           controller: 'HomeCtrl',
       })
       .state('app', { //app state being the side-menu
           url: '/app',
           abstract: true, //means that this state will never be activated directly, users will always go to a child state instead.
           templateUrl: 'templates/side-menu.html',
           controller: 'MenuCtrl'
       })       
       .state('app.postbox-details', {
           url: '/postbox-details',
           views: {
               'menuContent': {
                   templateUrl: 'templates/postbox-details.html',
                   controller: 'PostboxDetailsCtrl'
               }
           }
       })
    .state('app.audit-questions', {
        url: '/audit-questions/:postboxGuid',
        views: {
            'menuContent': {
                templateUrl: 'templates/audit-questions.html',
                controller: 'AuditCtrl'
            }
        }
    })
    $urlRouterProvider.otherwise('/home');
});

controller.js fichier (à gauche le code qui n'est pas pertinent)

angular.module('starter.controllers', [])    
.controller('HomeCtrl', function ($scope) {
})    
.controller('MenuCtrl', function ($scope) {
})    
.controller('PostboxDetailsCtrl', function ($scope, $ionicLoading, $ionicPopup, $cordovaBarcodeScanner, $state, DataService) {

    $scope.postboxGuid = DataService.getNewGUID();
    //Rest of the controller functions are below
})    
.controller('AuditCtrl', function ($scope, $ionicSlideBoxDelegate, $stateParams, DataService) {

    $scope.auditDetails = {
        postboxGuid: $stateParams.postboxGuid
    };    
});

Affichage de code de navigation

Le code de la vue d'effectuer des navigations toute utilisation <a> tags:

  • À partir de la page d'accueil de la boîte aux lettres-affichage détails: <a class="button button-block button-dark icon-right ion-chevron-right" href="#/app/postbox-details">New inspection</a>
  • À partir de la boîte aux lettres-affichage des détails de la vérification des questions vue: <a class="button button-block button-dark icon-right ion-chevron-right" ng-click="saveFormData()"
    ng-href="#/app/audit-questions/{{postboxGuid}}">New audit</a>

Si quelqu'un sait comment obtenir les contrôleurs pour recharger une fois qu'il a été initialisé ou si je vais sur ce problème de la mauvaise façon pourriez-vous me guider pour une méthode qui marche?


Mise À Jour De L'Information

J'ai vu récemment une une question relative à la et la réponse de @Radim Köhler a souligné la réponse dans cette question qui fournit de bonnes informations sur pourquoi il ne peut pas être une bonne idée d'utiliser cache:false sur une vue en raison de la performance.

J'ai pensé que je voudrais partager cela parce que, dans certaines situations, vous pouvez profiter de plus de performance en utilisant l'une des Ionique intégré dans la vue événements de cycle de vie d'exécuter du code sans avoir à désactiver l'affichage de la mise en cache.

utilisation ui-sref au lieu de ng-href
pour la première ancre utilisation ui-sref="app.postbox-details" & pour la deuxième ancre utilisation ui-sref="app.audit-questions({postboxGuid: postboxGuid})" au lieu de leur href
La plupart des fois les questions liées aux contrôleurs sont beaucoup de fautes de frappe et d'injection d'erreur; vérifier ce que vous injecter dans chaque contrôleur et d'utiliser le navigateur de la console pour déboguer les erreurs

OriginalL'auteur Will.Harris | 2015-01-22