J'ai un service qui transmet le pseudonym
paramètre à l'environnement. J'appelle ce pseudonym
dans mes points de vue, mais cela n'apparaît pas du tout.
Comment puis-je réparer cela pour afficher la valeur dans mes vues?
Service MyUser :
app.service('MyUser', ['DatabaseRef', 'firebase', function(DatabaseRef, firebase) { var pseudonym =""; var userId = firebase.auth().currentUser.uid; return { pseudonym: function() { DatabaseRef.ref('/users/' + userId).once('value') .then(function (snapshot) { pseudonym = snapshot.val().pseudonym; console.log("pseudony: ", pseudonym); return pseudonym; }); } } }]);
Dans ma console, je vois la valeur du pseudonym
. Mais pas dans ma vue html en utilisant {{pseudonyme}}
Et voici l'exemple de contrôleur de vue:
app.controller('ExampleCtrl', ["MyUser", function (MyUser) { $scope.pseudonym = MyUser.pseudonym(); }]);
Retournez la promesse créée par la méthode .then
:
app.service('MyUser', ['DatabaseRef', 'firebase', function(DatabaseRef, firebase) { //var pseudonym =""; var userId = firebase.auth().currentUser.uid; return { getUserName: function() { //return promise return ( DatabaseRef.ref('/users/' + userId).once('value') .then(function onSuccess(snapshot) { let pseudonym = snapshot.val().pseudonym; console.log("pseudony: ", pseudonym); return pseudonym; }) ); } } }]);
Ensuite, extrayez la valeur de cette promesse:
var app = angular.module('app', []); app.controller('loginController',['$scope', 'MyUser',function($scope, MyUser) { let promise = MyUser.getUserName(); //Extract data from promise promise.then( function onSuccess(pseudonym) { $scope.pseudonym = pseudonym; console.log($scope.pseudonym); }); }]);
La méthode .then
d'un objet renvoie toujours une promesse dérivée de la valeur (ou de la promesse) renvoyée par la fonction de gestionnaire fournie comme argument à cette méthode .then
.