2015-10-04 62 views
2

我只是想在我的應用程序登陸頁面/ index/application.hbs中顯示我的經度。我很尷尬地說,我一直在這工作多久!誰能幫我?Ember:在組件中使用服務

//geoservice.js 
import Ember from 'ember'; 

export default Ember.Service.extend({ 
    longitude: function(position){ 
     return position.coords.longitude; 
    }, 
    latitude: function(position){ 
     return position.coords.latitude; 
    } 
}); 

//geo-component.js 
import Ember from 'ember'; 

export default Ember.Component.extend({ 
    geoservice: Ember.inject.service(), 
    myLongitude: function(){ 
      if (navigator.geolocation) { 
       return this.get('geoservice').longitude(navigator.geolocation.getCurrentPosition()); 
      } else { 
       return "Geolocation is not supported by this browser."; 
      } 
     }.on('init'), 
}); 

//application.hbs 
<h2 id="title">Welcome to Ember</h2> 

{{outlet}} 
{{geo-component.myLongitude}} 
+0

地理位置API是通過[navigator.geolocation]出版(https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation)對象。 –

回答

3

問題不消耗在組件服務,但1)Geolocation API是異步的,和2)像你這樣,你不渲染的成分。這工作:

應用程序/組件/地理location.js

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    geo: Ember.inject.service(), 
    loading: true, 
    error: null, 
    latitude: null, 
    longitude: null, 

    setPosition: Ember.on('init', function() { 
    this.get('geo').getPosition().then((position) => { 
     this.set('latitude', position.latitude); 
     this.set('longitude', position.longitude); 
     this.set('loading', false); 
    }).catch((error) => { 
     this.set('error', error); 
    }); 
    }) 
}); 

應用程序/服務/ geo.js

import Ember from 'ember'; 

export default Ember.Service.extend({ 
    getPosition() { 
    return new Ember.RSVP.Promise((success, error) => { 
     if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(success, error) 
     } else { 
     error(new Error("Geolocation is not supported by this browser.")); 
     } 
    }).then((position) => { 
     return { latitude: position.coords.latitude, longitude: position.coords.longitude }; 
    }); 
    } 
}); 

應用/模板/組件/地理location.hbs

{{#if error}} 
    {{error}} 
{{else if loading}} 
    Loading... 
{{else}} 
    lat: {{latitude}}, long: {{longitude}} 
{{/if}} 

應用程序/模板/ application.hbs

<h2 id="title">Welcome to Ember</h2> 

{{geo-location}} 
+0

謝謝!這是一個巨大的幫助。你能告訴我關於=>嗎?這是一個合法的JavaScript運算符嗎? –

+1

'()=> {}'是'function(){}'的ES6功能簡寫,請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions。 ember-cli使用[Babel](https://babeljs.io/)將ES6轉換爲ES5,因此可以在當今的瀏覽器中使用。 :) –

+1

啊。不錯。謝謝 –