0

Ich verwende Angular-Meteor mit Ionic.Meteor-Subskriptionen werden nicht beendet, nachdem Ionenansichten geändert wurden

Meteor-Version: 1.3.2.4, Winkelversion: 1.5.5, Ionic-Version: 1.2.4.

Ich benutze auch ES2015 für meine Meteor/Angular App.

Für einen Blick Ich habe:

import angular from 'angular'; 
import angularMeteor from 'angular-meteor'; 
import uiRouter from 'angular-ui-router'; 

import { Meteor } from 'meteor/meteor'; 
import { SomeCollection } from 'path/to/collection'; 

import './view1.html'; 

class View1 { 
    constructor($scope, $reactive, $state) { 
    this.$state = $state; 

    this.$scope = $scope; 

    $reactive(this).attach($scope); 

    this.subscribe('my.subscription'); 

    this.helpers({ 
     list:() => { 
     return SomeCollection.find({}); 
     } 
    }); 
    } 
} 

export default angular.module('view1', [ 
    angularMeteor, 
    uiRouter, 
    View1 
]).config(config); 

function config($stateProvider) { 
    'ngInject'; 

    $stateProvider.state('app.view1', { 
    url: '/view1', 
    template: '<view-1></view-1>', 
    views: { 
     'appContent': { 
     controller: View1, 
     controllerAs: 'view1', 
     templateUrl: 'path/to/template.html' 
     } 
    } 
    }); 
} 

Und die andere Ansicht Ich habe eine ähnliche Art von Setup, außer ich zu einer anderen Publikation bin abonnieren möchte.

Etwas wie:

import angular from 'angular'; 
import angularMeteor from 'angular-meteor'; 
import uiRouter from 'angular-ui-router'; 

import { Meteor } from 'meteor/meteor'; 
import { SomeOtherCollection } from 'path/to/other/collection'; 

import './view2.html'; 

class View2 { 
    constructor($scope, $reactive, $state) { 
    this.$state = $state; 

    this.$scope = $scope; 

    $reactive(this).attach($scope); 

    this.subscribe('my.other.subscription'); 

    this.helpers({ 
     list:() => { 
     return SomeOtherCollection.find({}); 
     } 
    }); 
    } 
} 

export default angular.module('view2', [ 
    angularMeteor, 
    uiRouter, 
    View2 
]).config(config); 

function config($stateProvider) { 
    'ngInject'; 

    $stateProvider.state('app.view2', { 
    url: '/view2', 
    template: '<view-2></view-2>', 
    views: { 
     'appContent': { 
     controller: View2, 
     controllerAs: 'view2', 
     templateUrl: 'path/to/other/template.html' 
     } 
    } 
    }); 
} 

Wenn ich zwischen den Ionic Ansichten wechseln ich bemerken, dass ich aus Zeichnungen aus früheren Ansichten noch Polling bin. Laut Dokumentation, wenn ich $scope verwende, sollte die stop() Funktion automatisch aufgerufen werden.

Allerdings kann ich mit Mongol sehen, dass meine Subskriptionen nicht vom Wechsel der Ansichten gestoppt werden.

ich zur Zeit habe in der Lage eine schnelle Lösung zu verwenden, aber es ist hässlich und Kräfte zu meinem Code mit Abhilfen Ich glaube, sollte nicht notwendig sein, das heißt zu tun füllen:

$scope.$on('$ionicView.enter',() => { 
    this.subscriptions = []; 
    this.subscriptions.push(this.subscribe('some.collection')); 
    this.subscriptions.push(this.subscribe('some.other.collection')); 
}); 

$scope.$on('$ionicView.leave',() => { 
    for (var sub in this.subscriptions) { 
    this.subscriptions[sub].stop(); 
    } 
}); 

Was mache ich falsch? Wie kann ich Subskriptionen ordnungsgemäß beenden, wenn ich zwischen Ionic Views wechsle?

+0

Ich denke, Ihre "Workarounds" sind eigentlich das richtige Muster ... –

Antwort

0

Ionic speichert standardmäßig Controller/Ansichten, so dass mein Bereich nicht zerstört wurde und daher die stop()-Funktion nicht aufgerufen wurde, wenn zwischen Ansichten gewechselt wurde.

Um dies zu beheben Ich einfach cache: false auf die $stateProvider setzen und dies löste mein Problem.

Allerdings glaube ich, dass meine Ansichten im Cache gespeichert werden, also denke ich, dass ich eine nette Möglichkeit finde, Subskriptionen zu beenden, wenn ich zwischen Ansichten umschalte, aber cache: true halte ... Irgendwelche eleganten Ideen sind willkommen.

Verwandte Themen