Sto giocando con questi eventi ionicView che vengono attivati ogni volta che le visualizzazioni diventano attive e sto utilizzando il modello di menu laterale che è possibile riutilizzare durante la creazione del progetto. Sembra che se metto un listener per l'evento $ ionicView.entered in AppCtrl (quello usato dal template del menu laterale, che appartiene a uno stato astratto nella configurazione del router), viene chiamato due volte di seguito per qualsiasi delle sottoview (come quando si usa app.someotherview come stato).Ionic framework ionicView.entered evento sparato due volte
Non so se questo è il comportamento previsto perché dalla documentazione mi aspetterei che si attivi solo una volta, non importa se cambio la vista secondaria (la vista menuContent).
Mi piacerebbe sapere se questo è un comportamento previsto e in tal caso, come faccio ad avere un evento sparato solo una volta ogni volta che viene visualizzato il modello del menu laterale.
Questo è quello che ho scritto:
Questo è dal modulo applicativo:
.config(function($stateProvider, $urlRouterProvider, $httpProvider) {
$stateProvider
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/menu.html",
controller: 'AppCtrl'
})
.state('app.overview', {
url: "/overview",
views: {
'menuContent': {
templateUrl: "templates/overview.html",
controller: 'OverviewCtrl'
}
}
})
.state('login', {
url: "/login",
templateUrl: "templates/identificationscreen.html",
controller: "IdentificationCtrl"
})
.state('app.agenda', {
url: "/agenda",
views: {
'menuContent': {
templateUrl: "templates/agenda.html",
controller: 'AgendaCtrl'
}
}
});
$httpProvider.interceptors.push('credentialsInjector');
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/login');
Poi l'AppCtrl è questo:
angular.module('dashboard.controllers.app', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $ionicSideMenuDelegate, authService, $state) {
$scope.logout = function() {
authService.logout();
$state.go('login');
};
$scope.$on('$ionicView.enter', function(){ //This is fired twice in a row
console.log("App view (menu) entered.");
console.log(arguments);
});
$scope.$on('$ionicView.leave', function(){ //This just one when leaving, which happens when I logout
console.log("App view (menu) leaved.");
console.log(arguments);
});
});
il modello di menu:
<ion-side-menus enable-menu-with-back-views="false">
<ion-side-menu-content edge-drag-threshold="true">
<ion-nav-bar class="bar-stable">
<ion-nav-back-button>
</ion-nav-back-button>
<ion-nav-buttons side="left">
<button class="button button-icon button-clear ion-navicon" menu-toggle="left">
</button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-nav-view name="menuContent"></ion-nav-view>
</ion-side-menu-content>
<ion-side-menu side="left">
<ion-header-bar class="bar-stable">
<h1 class="title">APPoint!</h1>
</ion-header-bar>
<ion-content>
<ion-list>
<ion-item nav-clear menu-close href="#/app/overview">
Overview
</ion-item>
<ion-item nav-clear menu-close href="#/app/agenda">
Agenda
</ion-item>
<ion-item nav-clear menu-close ng-click="logout()">
Logout
</ion-item>
</ion-list>
</ion-content>
</ion-side-menu>
</ion-side-menus>
@andrian hai la soluzione per questo problema? – Webruster