2016-08-21 2 views
0

Ich habe eine AngularJS 1.5 Richtlinie:Wie setze ich eine Variable in einem AngularJS Callback?

var assetSearchService = function(proService) { 
    var assets = []; 

    var searchAssets = function(searchTerm){ 
     proService.searchAssets(searchTerm).then(function(data){ 
      assets = data.data; 
     }); 
    }; 

    return { 
     searchAssets, searchAssets, 
     assets: assets 
    }; 
}; 

Wenn ich versuche assetSearchService.assets in meinem Controller zu verwenden, nachdem Suche aufrufen, werden die Daten in assetService.assets nicht gesetzt.

Wenn ich die Daten protokollieren, nachdem die searchAssets Versprechen zurückgibt, bekomme ich Daten.

this.assets funktioniert nicht so wie bekomme ich die Variable aus dem Rückruf zurück?

+1

statt * Ersetzen * 'assets' in Ihrem Rückruf erreichen, Sie sollten die Daten in das vorhandene Array schieben. Probieren Sie 'assets = assets.concat (data.data);' – Claies

+0

Nein, die Assets verweisen nicht auf die ursprünglich deklarierten 'var-Assets'. – mikeb

+1

tut es, aber Sie ersetzen es innerhalb des Callbacks mit einem anderen Array, das die eckigen Bindungen bricht – Claies

Antwort

1

Eine Antwort gefunden. Weder assets = newArray noch conact funktioniert nicht, da beide ein neues Array zurückgeben und die Referenz brechen, anstatt die aktuelle zu ändern.

Dies funktioniert:

Array.prototype.push.apply(assets, data.data);

Hier ist ein funktionierendes Beispiel: https://jsfiddle.net/mbaranski/5k4bqo0z/

0

Sie können komplexere Lösung

var assetSearchService = function(proService) { 
    service = this; 
    service.assets = []; 

    service.searchAssets = function(searchTerm){ 
    proService.searchAssets(searchTerm).then(function(data){ 
     assets.push(data.data); 
    }); 
    }; 

    return service; 
}; 
+0

Dies beantwortet die Frage nicht, da das ganze Problem darin besteht, das' assets' -Array zu leeren und jedes Element aus 'data.data' dem neuen Array hinzuzufügen. – mikeb

Verwandte Themen