具有离子框架的 ngCordova 地理定位

Posted

技术标签:

【中文标题】具有离子框架的 ngCordova 地理定位【英文标题】:ngCordova geolocation with ionic framework 【发布时间】:2015-06-26 06:26:36 【问题描述】:

我正在尝试将 ngCordova 地理定位与我的 ionic 应用程序一起使用。我做了以下事情:

1) Bower 安装并在 index.html 中包含 ngcordova.min.js

2) 在我的 Angular app.module 中注入“ngCordova”作为依赖项。

angular
.module('app', ['ionic', 'ngCordova'])
.run(runConfig);

3) 在我的控制器中添加了依赖项

SomeController.$inject = ['$location', '$cordovaGeolocation',
                          '$ionicPlatform']

4) 这是我的控制器的样子:

 (function() 
    'use strict';

  angular
    .module('app.submission')
    .controller('SomeController', SomeController);

  SomeController.$inject = ['$location', '$cordovaGeolocation', '$ionicPlatform'];

  function SomeController($location, $element, $cordovaGeolocation, $ionicPlatform) 
    var vm = this;
    vm.place = '';
    vm.address = 
      'latitude' : null,
      'longitude' : null
    

    vm.initialize = initialize;
    vm.getAddress = getAddress;

    function initialize() 
       var input = (document.getElementById('location-search'));
       var searchBox = new google.maps.places.SearchBox((input));
    

    function getAddress()
      var posOptions = timeout: 20000, enableHighAccuracy: true;
            $cordovaGeolocation.getCurrentPosition(posOptions)
            .then(function(position)
                var lat  = position.coords.latitude
                var long = position.coords.longitude
                console.log('lat', lat);
                console.log('long', long);
            , function(error)
                console.log('error:', error);
            );
    

  

)();

5) ng-click 按钮调用函数 getAddress()。

当我在网络浏览器(谷歌浏览器)上测试应用程序时,我收到以下错误

TypeError: $cordovaGeolocation.getCurrentPosition is not a function
at SomeController.getAddress (SomeController.js:29)
at $parseFunctionCall (ionic.bundle.js:21044)
at ionic.bundle.js:53458
at Scope.$eval (ionic.bundle.js:23100)
at Scope.$apply (ionic.bundle.js:23199)
at HTMLButtonElement.<anonymous> (ionic.bundle.js:53457)
at HTMLButtonElement.eventHandler (ionic.bundle.js:11713)
at triggerMouseEvent (ionic.bundle.js:2863)
at tapClick (ionic.bundle.js:2852)
at HTMLDocument.tapMouseUp (ionic.bundle.js:2925)

有人可以在这里帮助我吗,我的代码有什么问题?它应该只在移动设备上工作吗?我在安卓设备上试过了,没用。

【问题讨论】:

试试看,forum.ionicframework.com/t/… 请张贴整个控制器或至少大部分。可能存在 $inject 无法正常工作的依赖问题。尝试注释掉整个函数,然后执行警报或 console.log / $log.debug 以查看控制器中是否显示任何内容。我还注意到var posOptions = timeout... 行末尾缺少; 用完整的控制器代码更新了我的问题 【参考方案1】:

我正在使用相同的代码,尝试用这些代码替换

 SomeController.$inject = ['$scope','$location', '$cordovaGeolocation', '$ionicPlatform'];

  function SomeController($scope,$location, $element, $cordovaGeolocation, $ionicPlatform) 
  var posOptions = timeout: 20000, enableHighAccuracy: true,maximumAge: 0 ;
  $scope.where = function()
    $cordovaGeolocation.getCurrentPosition(posOptions)
      .then(function(position)
          console.log(position);
          $scope.lat1  = position.coords.latitude
          $scope.lng1 = position.coords.longitude

      , function(error)
          console.log('error:', error);
    );
  ;

【讨论】:

感谢您的回复。它在浏览器中工作,但它会返回错误回调并抛出 positionError 。 对于设备不要使用 .min.js

以上是关于具有离子框架的 ngCordova 地理定位的主要内容,如果未能解决你的问题,请参考以下文章

离子地理定位总是陷入错误方法

离子地理定位 - 如何更新位置?

离子原生地理定位在观察位置上捕获错误

离子地理定位,iOS 上没有权限

原生离子地理定位有时不起作用

地理定位离子在浏览器测试中工作但不在android上