Ich schreibe eine Wrapper-Bibliothek, die eine Speicherfunktion hat. Im Grunde ruft es nur die $http.post
Funktion auf und gibt das Versprechen zurück (der Kürze halber).
Leider ist der this
Operator in der Funktion, die aufgerufen wird, wenn das Versprechen gelöst ist (das heißt die Funktion, die mit den Ergebnisdaten aufgerufen wird) auf das Window
Objekt. Ich frage mich also, ob es eine Möglichkeit gibt, den Operator this
an ein anderes Objekt zu binden, wenn das Versprechen aufgelöst oder zurückgewiesen wird?
Bitte schauen Sie auf den Code unten, um mehr Sinn zu machen:
angular.module('SomeService', []).service('$service', function($http) {
this.get = function() {
return $http.get('http://jsonplaceholder.typicode.com');
}
return this;
});
angular.module('testApp', ['SomeService']).controller('testController', function($service) {
$service.get().then(function(data) {
alert(this);
//It should say Object Window!
//Is is possible to bind `this` to say SomeService (example),
//Or some other object?
});
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="testApp" ng-controller="testController">
{{1+1}}
</div>
Wenn Sie den Code oben ausgeführt, so die Warnung [Object Window]. Also meine Frage ist: Ist es möglich, this
zu binden, um SomeService (Beispiel) oder ein anderes Objekt zu sagen?
P.S. Eine Idee ist vielleicht, dass ich einen Wrapper für $http.get
schreiben kann, anstatt das Versprechen direkt zurückzugeben und dann den Operator this
irgendwie zu binden, bevor ich mein eigenes Versprechen auflöste? Aber ich kann keine Informationen darüber finden, wie man Versprechen mit (this
) Bindungen löst.
Update: Danke für die Vorschläge .. Ich weiß über Bind, aber der Fall ist ein wenig komplizierter. Die SomeService.save-Methode erstellt ein Objekt Objekt. Daher benötigt die Funktion, die SomeService.save() aufruft, sowohl das erstellte Element als auch die Daten, die von der $ http-Anforderung zurückgegeben werden, wenn das Versprechen aufgelöst wird. Ich fand heraus, dass ich dies nur auf das neue Item-Objekt setzte und die Daten von $ http unverändert übergab. Macht das irgendeinen Sinn? Wenn nicht, bitte sag es mir und ich werde einen Plunkr erstellen, der versucht, das Gleiche zu erklären.
Verwenden '.then (function() {} .bind (Someservice))' – jcubic
diese Ihnen vielleicht helfen: [Was tut var, die diese Mittel in Javascript =] (http://stackoverflow.com/ questions/4886632/what-does-var-das-das-gemein-in-javascript) – praetoriaen