Ich versuche, Daten zwischen Controllern mit einem Dienst zu übergeben, aber ich habe Probleme, da es nichts zurückgibt.Wie Daten zwischen Controllern mit einem Dienst in Angular übergeben werden
Hier ist mein Service:
app.service('myService', function() {
var savedData = "";
return {
get: function() {
//You could also return specific attribute of the form data instead
//of the entire data
return savedData;
},
set: function (data) {
//You could also set specific attribute of the form data instead
this.savedData = data;
}
};
});
Hier ist der Controller die Daten unter Verwendung einer Funktion namens goToAccount() zu speichern:
app.controller("chatController", ["$scope", "$firebaseArray", "Auth", "$window", "$state", "myService",
function($scope, $firebaseArray, Auth, $window, $state, myService) {
$scope.message = 'ChatRoom';
$scope.auth = Auth;
$scope.auth.$onAuthStateChanged(function(firebaseUser) {
$scope.firebaseUser = firebaseUser;
console.log("Name: "+firebaseUser.displayName + "," + firebaseUser.email);
firebaseUser.providerData.forEach(function (profile) {
console.log("Sign-in provider: "+profile.providerId);
console.log(" Provider-specific UID: "+profile.uid);
console.log(" Provider Name: "+profile.displayName);
console.log(" Provider Email: "+profile.email);
console.log(" Provider Photo URL: "+profile.photoURL);
user = profile;
});
});
var ref = firebase.database().ref().child("messages");
// create a synchronized array
$scope.messages = $firebaseArray(ref);
// add new items to the array
// the message is automatically added to our Firebase database!
$scope.addMessage = function() {
$scope.messages.$add({
user: user.displayName,
email: user.email,
text: $scope.newMessageText
});
};
$scope.goToAccount = function(email){
myService.set(email);
console.log(" Email: "+email);
$window.location.href = "/account.html"
}
}
]);
Und hier ist der Controller, der die Daten erhält. myService.get() gibt leeren Raum:
app.controller("accountCtrl", ["$scope", "Auth", "$window", "$state", "$stateParams", "myService",
function($scope, Auth, $window, $state, $stateParams, myService) {
console.log(myService.get());
$scope.message = 'Account Page for id' + myService.get();
}
]);
Die Funktion goToAccount in html mit einem ng-Klick ausgelöst wird:
<a ng-click="goToAccount(message.email)">
Was mache ich falsch? Gibt es eine einfachere Möglichkeit, Daten zwischen Controllern zu übertragen? Danke im Voraus.
Sie sind se tting 'this.savedData', was der Kontext Ihres Dienstes ist, mit anderen Worten, das Festlegen einer Eigenschaft Ihres Dienstes. Sie geben jedoch 'savedData' zurück, das nur eine normale Variable ist, die nicht zu Ihrem Service gehört. Entweder benutze 'this' sowohl für get und set oder lasse es für beide weg. Nicht mischen und anpassen. Sie sehen zwei verschiedene 'savedData's, wenn das Sinn macht. – ste2425
Wenn ich this.savedData zurückgebe, gibt es undefined zurück? –
'this.savedData = data' Dies bezieht sich auf den Kontext, in dem Sie den Dienst aufrufen. Verwenden Sie einfach 'savedData = data' – Purushoth