Я пытаюсь передать данные между контроллерами с сервисом, но у меня возникают проблемы, поскольку он ничего не возвращает.Как передавать данные между контроллерами с сервисом в Angular
Вот моя служба:
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;
}
};
});
Вот контроллер сохранения данных, используя функцию, называемую goToAccount():
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"
}
}
]);
А вот контроллер, который получает данные. myService.get() возвращает пустое пространство:
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();
}
]);
Функция goToAccount срабатывает в HTML с нг-клик:
<a ng-click="goToAccount(message.email)">
Что я делаю неправильно? Есть ли более простой способ передачи данных между контроллерами? Заранее спасибо.
Вы себе tting 'this.savedData', который является контекстом вашей службы, другими словами, устанавливая свойство вашей службы. Однако возвращаемая вами 'savedData', которая является обычной переменной, не является частью вашей службы. Либо используйте 'this' как для get, так и для set или опустить его для обоих. Не смешивайте и не смешивайте. Вы смотрите на два разных 'savedData', если это имеет смысл. – ste2425
Если я возвращаю this.savedData, он возвращает undefined? –
'this.savedData = data' относится к контексту, в котором вы вызываете эту услугу. Просто используйте 'savedData = data' – Purushoth