我目前正处于通过Ionic构建应用程序天气的起始阶段。现在我想实现cordova地理定位,我有错误Unknown provider: $cordovaGeolocationProvider <- $cordovaGeolocation
我尝试修复但没有成功,但是这在打开它时一直出错。出于测试目的,我使用离子服务并在localhost中进行检查。
我的代码
(function() {
angular.module('app.weather', ['ionic'])
.factory('Weather', function($q, $http) {
var deferred = $q.defer();
function getCurrentWeather(lat, lng) {
var url = 'https://api.forecast.io/forecast//' + lat + ',' + lng + '?callback=JSON_CALLBACK';
$http.jsonp(url)
.success(deferred.resolve)
.error(deferred.reject);
return deferred.promise;
}
return {
getCurrentWeather: getCurrentWeather
};
})
.controller('WeatherCtrl', function($scope, $cordovaGeolocation, Weather) {
$scope.loading = true;
$scope.toCelsius = function(temperature) {
return ((temperature - 32) / 1.8).toFixed(1);
};
$cordovaGeolocation
.getCurrentPosition({
timeout: 10000,
enableHighAccuracy: false
})
.then(function(position) {
var lat = position.coords.latitude;
var long = position.coords.longitude;
Weather.getCurrentWeather(lat, long).then(function(data) {
$scope.weatherInfo = data;
$scope.loading = false;
}, function(error) {
//TODO Display error message
});
}, function(err) {
//TODO Display error message
});
});
})();
代码html
<ion-view title="الرئيسية" id="page2" style="background-color:#FFFFFF;" class=" ">
<ion-content padding="true" class="has-header">
<ion-pane>
<div ng-controller="WeatherCtrl as weatherCtrl">
<div ng-show="loading">
Carregando informações...
</div>
<div ng-hide="loading">
<p>
Temperatura: {{toCelsius(weatherInfo.currently.temperature)}}º
</p>
<p>
Sensação térmica: {{toCelsius(weatherInfo.currently.apparentTemperature)}}º
</p>
</div>
</div>
</ion-content>
</ion-view>
答案 0 :(得分:7)
在模块中添加'ngCordova',如
(function() {
angular.module('app.weather', ['ionic','ngCordova'])
然后将ngcordova.min.js文件链接添加到index.html
答案 1 :(得分:1)
确保您已安装ngCordova
或Ionic Native
,否则您无法使用$cordovaGeolocation
,因为它是在这些库中的任何一个库中定义的包装器。
您可以找到有关如何为ngCordova
安装Ionic Native
here和here的说明。最近还有一篇关于Ionic Native
here可能感兴趣的文章。
另请注意,大多数Cordova插件在浏览器中不起作用,因此您可能需要在实际设备上进行测试。
答案 2 :(得分:0)
您是否安装了$ cordovaGeolocation插件?
$ cordova地理位置说明:http://ngcordova.com/docs/plugins/geolocation/
如果没有,您可以通过以下方式安装:
cordova plugin add cordova-plugin-geolocation
答案 3 :(得分:0)
$ cordovaGeolocation功能以及任何其他本机功能只能在模拟器或设备上使用。如果您从浏览器提供应用程序,则它无法与插件连接,因此未定义。