Контроллер не вызывается второй раз в ionic app

В одном из моих приложений, построенных с использованием Ionic framework, у меня есть несколько файлов шаблонов, которые используются для отображения контента при нажатии кнопки «Next». Однако в некоторых случаях я хочу использовать тот же шаблон, но с другими данными (-else часть условия if-else в приведенном ниже коде js). Шаблон отображает правильные данные при первой загрузке. Однако, когда я нажимаю кнопку «next», нет никакого вызова, который сделан к контроллеру(AerodynamicCtrl), и я снова получаю те же данные (если часть условия). Также я читал о ion-view, но я не использовал его для своего кода. Не мог бы кто-нибудь помочь мне и подсказать, что я делаю неправильно здесь? Спасибо заранее.

мой код ниже —

html code — индекс.формат html

<ion-content>
 <div class="list card">
    <div data-id='{{q_no}}' class="item item-divider custom-question-title">
        {{question_info.text}}
    </div>
    <div data-ng-include="getQuestionTemplate()"></div>
 </div>
</ion-content>

getQuestionTemplate() в приведенном выше фрагменте кода извлекает мой шаблон на основе некоторого условия и отображает файл ниже

шаблоны / ion-aero.формат html

<div data-ng-controller="AerodynamicCtrl" class="spritespin" ng-init="init_aerodynamic_activity()"></div>

Код JS

app.controller("AerodynamicCtrl", ["$scope", "$localStorage", "$fileLogger", AerodynamicCtrl]);

function AerodynamicCtrl($scope, $localStorage, $fileLogger){

    $scope.init_aerodynamic_activity = function(){

        if($scope.question_info.category == 1){
            $('.spritespin').spritespin({
                // generate an array of image urls. This is a helper function that takes a {frame} placeholder
                source: SpriteSpin.sourceArray('img/aero/{frame}.png', {
                    frame: [1,52] // this ramge of numbers is interpolated into the {frame} placeholder
                }),
                width: 480, // Specify the display width and height of the frame. // Optionally the size of the container can be defined with CSS.
                height: 327,
                responsive: true
            });

        } else {
            $('.spritespin').spritespin({
                // source: 'lib/threesixty-slider/assets/panorama.jpg',
                source: 'img/aero/panorama.jpg',
                width: 600, // this sets the width of the display. The panorama image must be larger than the below width
                height: 300,
                // select the modules
                mods: [
                    'drag',  // change frame on mouse drag
                    'ease',  // enable the easing module. this will ease out the animation after mouse release, instead of a hard stop
                    'panorama' // the panorama display module
                ]
            });
        }
    }
}

2 ответа

  1. Либо удалите представление из кэширования на родительском ion-viewтеге:

    <ion-view view-title="Title" cache-view="false"></ion-view>
    

    Или использовать одно из событий Ion view:

    $scope.$on("$ionicView.enter", function(event, data){
       $scope.init_aerodynamic_activity();
    });
    

    Второй вариант лучше, поскольку представление кэшируется, и у вас больше контроля над событиями, как описано здесь:
    http://ionicframework.com/docs/api/directive/ionView/

  2. Вы пытались ввести в маршрутизацию кэш свойств: false?

    как:

     $stateProvider
            .state('app', {
                url: '/app',
                abstract: true,
                templateUrl: 'templates/menu.html',
                controller: 'AppCtrl'
            })
            .state('app.products', {
                url: '/products',
                views: {
                    'menuContent': {
                        templateUrl: 'templates/product/tab-products.html',
                        controller: 'ProductsCtrl',
                        cache:false, //this force IONIC to re call the controller
                        controllerAs: 'prod'
                    }
                }
            })