2016-04-16 5 views
0

Я пытаюсь обнаружить движение с помощью ionic2. Вот фрагмент моего detectMotion.ts.ionic2 - Устройство Motion, возвращаемое наблюдаемым, но отписывающее сообщение дает ошибку

import {DeviceMotion} from 'ionic-native'; 
@Page({ 
    templateUrl: 'build/pages/pedometer/pedometer.html' 
}) 
export class Pedometer { 
    platform; 
    watch; 
    constructor() { 
     this.platform = platform; 
    } 
    startWatching() { 
     console.log('Starting to watch'); 
     this.watch = DeviceMotion.watchAcceleration(this.options); 
     this.watch.subscribe(result => {this.detectMotion(result)}); 
    } 
    stopWatching() { 
     console.log('Stop Watching'); 
     // this.watch.dispose(); 
     this.watch.unsubscribe(); 
     // this.watch.clearWatch(); 
    } 
    detectMotion(result) { 
     console.log('Current Readings: '+ JSON.stringify(result)); 
     //.....do something with the results..... 
     this.stopWatching(); // Stop and wait for a second before restarting 
     setTimeout(this.startWatching(), 1000); 
    } 
} 

StartWatching вызывается нажатием кнопки в html. Я пробовал все 3 варианта, которые я мог бы исследовать. отказаться от подписки; распоряжаться; clearWatch Но все напрасно. Точная ошибка, что я получаю это

error ORIGINAL EXCEPTION: TypeError: Object #<Observable> has no method 'unsubscribe' 

от reference из ioni2 я узнал, что она возвращает Observable

Любая помощь или указатель ценится Спасибо заранее

~ Dhaval

ответ

0

Насколько я знаю, вы должны сохранить subscription, возвращенный с помощью вызова subscribe, и позвоните по телефону unsubscribe().

вы получите что-то вроде этого:

export class Pedometer { 
    platform; 
    watch; 
    watchSub : Subscription; 
    constructor() { 
     this.platform = platform; 
    } 
    startWatching() { 
     console.log('Starting to watch'); 
     this.watch = DeviceMotion.watchAcceleration(this.options); 
     this.watchSub = this.watch.subscribe(result => {this.detectMotion(result)}); 
    } 
    stopWatching() { 
     console.log('Stop Watching'); 
     // this.watch.dispose(); 
     this.watchSub.unsubscribe(); 
     // this.watch.clearWatch(); 
    } 
    detectMotion(result) { 
     console.log('Current Readings: '+ JSON.stringify(result)); 
     //.....do something with the results..... 
     this.stopWatching(); // Stop and wait for a second before restarting 
     setTimeout(this.startWatching(), 1000); 
    } 
} 
+0

Благодарности @PierreDuc - Я следовал [это] (http://www.gajotres.net/detecting-device-motion-with-ionic-framework- и-ngcordova /), которая является версией iioinic1. Было понимание, что часы - это ручка для подписки и отмены подписки. Еще раз спасибо, это помогло мне –