Meine App verfügt über ein Ereigniskonzept mit Breiten- und Längenattributen. Clientseitig möchte ich navigator.geolocation verwenden, um die aktuelle Entfernung zu jedem Ereignis zu berechnen und es in der Ansicht anzuzeigen.Erstellen einer asynchronen Instanzmethode für das ngResource-Objekt
Unten ist was ich bisher habe. Es läuft, aber es steckt in einer Endlosschleife (Fehler weiter unten).
factory('ys$currentPosition', ['$q', '$window', function($q, $window){
'use strict';
return {
position: function(){
var deferred = $q.defer();
if ($window.navigator.geolocation) {
$window.navigator.geolocation.getCurrentPosition(
function (position) {
deferred.resolve(position);
},
function (err) {
deferred.reject(err);
}
);
} else {
deferred.reject('Geolocation not supported.');
}
return deferred.promise;
}
};
}]).
factory('Event', ['$resource', 'ys$currentPosition', function($resource, ys$currentPosition){
'use strict';
var Event = $resource($server_hostname + '/api/v4/organizations/' + $org_id + '/events/:id', {}, {});
Event.prototype.distance = function(){
var this_event = this;
return ys$currentPosition.position().then(function(position){
return getDistanceFromLatLonInMi(
position.coords.latitude,
position.coords.longitude,
this_event.latitude,
this_event.longitude
)
});
}
return Event;
}]).
View (in HAML):
%ys-index-row-right{"ng-if" => "item.distance()"}
%i.fa.fa-map-marker
%span
{{ item.distance() }} mi
ist hier, dass Fehler:
angular-0195028….js?body=1:69 Uncaught Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: [[{"msg":"item.distance()","newVal":{},"oldVal":{}}],[{"msg":"item.distance()","newVal":{},"oldVal":"..."}],[{"msg":"item.distance()","newVal":{},"oldVal":"..."}],[{"msg":"item.distance()","newVal":{},"oldVal":"..."}],[{"msg":"item.distance()","newVal":{},"oldVal":"..."}]]
Plunker:
https://plnkr.co/edit/zk5ETxCzvzKYAJOlUPPA?p=preview
Seine ständig wechselnden .. – amanuel2
Erstellen Sie einen Plunder –
@DrJones Plunker hinzugefügt - danke! – jsharpe