angularjs firebase用户身份验证服务不与视图通信

时间:2016-10-15 11:14:35

标签: javascript angularjs firebase-authentication angularjs-service

我有一个服务,它将参数pseudonym传递给环境。我在我的观点中呼吁pseudonym,但它根本不会出现 如何解决此问题以在我的视图中显示值?

我的用户服务

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;
                });

        }
    }
}]);

在我的控制台中,我看到了pseudonym的值。但不是在我看来html使用{{pseudonym}}
这是示例视图控制器:

app.controller('ExampleCtrl', ["MyUser",
    function (MyUser) {
     $scope.pseudonym = MyUser.pseudonym();
}]);

1 个答案:

答案 0 :(得分:1)

返回.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;
                })
            );
        }
    }
}]);

然后从该承诺中提取值:

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);
    });
}]);

对象的.then方法总是返回从处理函数返回的值(或promise)派生的promise,该函数作为.then方法的参数提供。