2016-03-19 5 views
0

ich wahrscheinlich meine Begriffe ziemlich schlecht bin munging, also, wenn Sie die richtige Art und Weise kennen zu dem Wert zu beziehen ‚a‘ in einer Funktion wie:Callback-Funktion nicht auf lokale Variable Wert hält

var a = 10; 
function addA(b){ 
    return b + a; 
} 

Lassen Sie mich wissen, .

Wie auch immer, kurz gesagt, ich möchte eine Variable in $ Scope, nach einem Callback zurück, mit einem Wert ändern. Das ist, was ich tue:

function fetchFromAPIs(_scope){ 
    if (navigator.geolocation){ 

    var foo = function(position){ 
     var scope = _scope; 
     getPosition(position, scope); 
    } 
    navigator.geolocation.getCurrentPosition(foo); 
    } 
    else{ 
    $(body).prepend("<span>Geolocation is not supported by this browser.</span>"); 
    } 
} 

function getPosition(position, scope){ 
    scope.weather = 'foo'; 
    scope.latitude = position.coords.latitude; 
    scope.longitude = position.coords.longitude; 
    getCityCountry(scope); 
    getWeather(scope); 
} 

angular.module('app', []) 
.controller('weatherController', function($scope){ 

    function init(){ 
    fetchFromAPIs($scope); 
    } 

    init(); 
}); 

Doch $ scope.weather wird nicht aktualisiert. Aber wenn ich eine Position in getPosition abnehme und foo ('') innerhalb von fetchFromAPIs ($ scope) aufruft, wird der $ scope.weather-Wert gut aktualisiert.

Was auf der Erde geschieht? Und gibt es eine bessere Angular-zugelassene Weise, dies zu tun? Das Denken des Aufgebens und nur jQuery mit meinem abgerufenen Werte auf der Seite zu setzen ...

+0

Sie ersetzen die Verbindung von '$ scope' innerhalb Ihrer' fetchFromAPIs'. Hör auf damit und geben sie als Referenz, dann wird alles in Ordnung sein –

+0

Ich glaube, du bist Problem ist 'var foo = function (Position) {var scope = _SCOPE; // Nur lokal für die Funktion, Sie möchten die globale Variable ändern. remove var getPosition (position, scope); } Entfernen Sie var von diesem Funktionsaufruf, so dass es auf die globale Version verweist. –

+0

Wo/wie testen Sie, dass '$ scope.weather' gesetzt ist? –

Antwort

-1

Ich glaube, du bist Problem ist

var foo = function(position){ 
    var scope = _scope; 
    getPosition(position, scope); 
} 

Ändern Sie es an:

var foo = function(position){ 
    scope = _scope; //reference global variable and not local. 
    getPosition(position, scope); 
} 
+0

Was macht Sie denken, dass es eine globale 'scope' Variable? –

+0

Whoops, erneut überprüft und sieht aus wie es nicht funktioniert. – habudu

+0

Da scope ein Argument ist, das an die init-Funktion übergeben wird, muss es vor dem Aufruf und außerhalb der Funktionen existieren. –