gpt4 book ai didi

javascript - 如何保存 Firebase 中持久存在的地理位置数据?

转载 作者:行者123 更新时间:2023-12-03 11:28:22 25 4
gpt4 key购买 nike

我想在提交输入时保存地理坐标以进行内部数据排序。

它显示坐标,即加载当前位置。但是,数据不会保存,而是不断刷新。我尝试将其另存为:

position:{lat:'',lng:''}

如何确保保存数据而不仅仅是刷新当前位置?

导航栏 Controller

 app.controller('NavCtrl', function($scope, $location, Post, Auth, $state, Geolocation) {
$scope.post = {
title: '',
lat: '',
lng: ''
};


同一 Controller 下的提交函数

 $scope.submitPost = function () {
Post.create($scope.post).then(function (ref) {
$location.path('tab/posts/' + ref.name());

$scope.post = {
title: '',
lat: '',
lng: ''
};

$scope.position = null;
$scope.message = 'Determining location...';

new Geolocation().then(function (position) {
$scope.position = position;
}, function (reason) {
$scope.message = 'Could not be determined';
});


也在主 Controller 下

app.controller('MainCtrl', function($scope, Post) {

$scope.posts = Post.all;
$scope.post = {
title: '',
lat: '', //inserted geodata to be reflected in main page
lng: ''
};

最佳答案

您的范围一直在重新创建。当您的 submitPost 方法运行时,该位置再次从当前 $scope 消失。通过在其中放置一些 console.log 语句,可以很容易地确定这一点。

console.log('clearing position');
$scope.position = null;
$scope.message = 'Determining geolocation';

new Geolocation().then(function (position) {
console.log('setting position');
$scope.position = position;
}, function (reason) {
$scope.message = 'Could not be determined';
});

您将看到它记录:

clearing position

setting position

当您最初加载页面时。然后是另一个:

clearing position

当您点击“新帖子”链接时。所以看起来你的 Controller 在那里被重新执行,这从范围中清除了位置。

我能找到的最快解决方法是简单地在 $rootScope 上设置地理位置并从那里使用它:

//console.log('clearing position');
//if (!$scope.position) $scope.position = null;
$scope.message = 'Determining geolocation';

new Geolocation().then(function (position) {
console.log('setting position');
$rootScope.position = position;
}, function (reason) {
$scope.message = 'Could not be determined';
});

//////////////////////////// NEW POST ////////////////////////////
$scope.submitPost = function () {
Post.create($scope.post).then(function (ref) { //postId works
$location.path('tab/posts/' + ref.name()); // replace with postId
console.log('submitPost: position=');console.log($scope.position);
$scope.post = {
title: '',
timestamp: new Date().toUTCString(),
position: $rootScope.position
};
});
};

这样,当我们到达 submitPost 时,位置仍然位于根范围内。

随着您更好地使用 console.log 和 Chrome Angular 开发工具等工具,您可能可以弄清楚为什么 Controller 会第二次执行(从当前作用域中清除位置)。但这应该能让你上路。

关于javascript - 如何保存 Firebase 中持久存在的地理位置数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26825379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com