2014-11-09 1 views
0

Я хочу сохранить геокоординаты при отправке ввода для внутренней сортировки данных.Как сохранить данные геолокации, которые сохраняются в Firebase?

Отображаются координаты, то есть загрузка текущего местоположения. Однако данные не сохраняются, но постоянно обновляется. Я пытался спасти его, как:

положение: {лат: «», LNG: «»}

Как обеспечить данные сохраняются, а не просто обновление текущего местоположения?

Контроллер Navbar

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


Разместить функцию в одном контроллере

$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'; 
     }); 


Также под главным контроллером

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

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

Я не вижу использования Firebase в коде, который вы включили.Учитывая количество технологий, которые вы используете, было бы лучше, если бы вы настроили воспроизведение проблемы в скрипте/bin/plunkr. –

+0

@FrankvanPuffelen Спасибо за ответ! Поставит его и опубликует здесь в ближайшее время. Извини за это. – Thinkerer

+0

Если вы не можете воспроизвести проблему, возможно, вы можете попытаться упростить plunkr, пока не сможете воспроизвести проблему? Учитывая название вашего вопроса, должен быть способ воспроизвести его с меньшим количеством используемых файлов и технологий. http://stackoverflow.com/help/mcve –

ответ

1

Ваш объем постоянно воссоздается. К моменту запуска вашего метода 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'; 
}); 

Вы увидите, что он записывает:

клиринговой позиции

положение установка

При первоначальной загрузке страницы. А потом еще:

клиринговой позиции

При нажатии на "Новое сообщение" ссылку. Таким образом, кажется, что ваш контроллер перепрограммируется там, что очищает позицию от области видимости.

Самый быстрый фикс я мог бы найти было просто установить геолокации на $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 devtools, вы, вероятно, можете выяснить, почему контроллер выполняется во второй раз (очистка позиции из текущей области). Но это должно помочь вам.

+0

Я все еще пытаюсь выяснить почему. Первоначально я предполагал, что главная страница сообщения прикреплена к PostCtrl через stateprovider, в то время как кнопка отправки nav (также на главной странице) имеет другой NavCtrl. Как-то удаление геокода из NavCtrl для вставки в PostCtrl не решает проблему. – Thinkerer

+0

Местоположение пользователя является глобальным свойством, поэтому я считаю, что использование геолокации в $ rootScope имеет смысл здесь. –

+0

Получил это, спасибо Фрэнку. И последний вопрос. Должен ли я менять позицию из 'position: ''' to 'position: $ rootScope.position' для всех 3 экземпляров кодов $ scope.post = {}? Я думаю, что на PostCtrl кажется ненужным, хотя ... – Thinkerer

Смежные вопросы