Ionic framework ionicView.eingetragen event gefeuert zweimal
Ich hab das Spiel mit diesem ionicView Ereignisse, die ausgelöst werden, wenn der Blick auf, aktiv zu werden, und ich bin mit der Seite-Menü-Vorlage, die Sie wieder verwenden können, wenn Sie das Projekt erstellen. Es scheint, dass, wenn ich einen listener für das $ionicView.eingetragen event in der AppCtrl (der die Seite im Menü-template, das gehört zu einem abstrakten Zustand, in dem ui-router-Konfiguration) es wird als zweimal in Folge für die Untersichten (wie bei der Verwendung von app.someotherview als Staat).
Ich weiß nicht, ob dies das erwartete Verhalten, weil aus der Dokumentation würde ich erwarten, dass es Feuer nur einmal, egal ob ich die Untersicht (die menuContent-Ansicht).
Ich würde gerne wissen, ob dies ist das erwartete Verhalten, und wenn ja, wie bekomme ich ein event nur ausgelöst, nachdem jedes mal, wenn er bekommt, um zu zeigen Sie die Seite im Menü-template.
Dies ist, was ich habe geschrieben:
Dies ist von der Anwendung Modul:
.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');
Dann die AppCtrl ist diese:
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);
});
});
Menü Vorlage:
<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>
- du hast die Lösung für dieses Problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen einfachen workaround:
ev.targetScope.id === $scope.id
auch wennev.targetScope !== $scope
!Die beste option, die ich gefunden habe, um zu simulieren onEnter-Ereignis zu nutzen, um die in view-controller :
Können Sie Sie Global deaktivieren des caching-Mechanismus, der durch Ionische by doing:
Ich habe nicht versucht, dass auf meine eigenen obwohl.
Anderes, die beste Weise, die für mich gearbeitet wurde dabei
Dies ist den cache zu löschen, bevor er den Blick erneut ausführen, controller jedes mal, wenn Sie geben Sie wieder zurück.
Versuchen
$ionicView.afterEnter
. Das feuert nur einmal für mich.URL
Beim ersten habe ich Florian ' s Antwort aber bemerkt, dass in meinem Fall es ist nur ein symptom für ein Grundproblem, denn dies passiert nicht alle Controller, nur dieses eine.
In meinem Fall, es passiert, weil ich versucht habe, zu schrittweise Migration von Ionic/AngularJS v1 Ionic/AngularJS v2.
Habe ich Hinzugefügt
controllerAs
in meinem template:aber ich vergaß, entfernen Sie die controller-Referenz in meinem
app.js
:So, in meinem Fall die Lösung ist: