在Angular路线中解析

时间:2013-08-02 17:36:30

标签: angularjs firebase

我在路线中的解析成员上有以下代码:

resolve: {
    loadData: function ($q) {
        var deferred = $q.defer();
        var fbRef = new Firebase("https://myPathToFirebase");
        var auth = new FirebaseSimpleLogin(fbRef, function (error, user) {
            console.log('resolving. ' + user.id + ', Provider: ' + user.provider);
            deferred.resolve();
        });
        console.log('returning..');
        return deferred.promise;
    }
}

为了清晰起见,FirebaseSamleLogin中的回调已经过简化 日志记录显示代码按预期运行。用户ID和提供者(facebook)在回调中打印。 我的问题是deferred.resolved()不起作用。代码不会继续运行控制器代码并呈现模板。就好像延迟从未解决过一样。 我有点被困在这里,任何帮助/建议将不胜感激 谢谢

2 个答案:

答案 0 :(得分:1)

我认为你可能需要像这样

包装$ apply()中的resolve()
var auth = new FirebaseSimpleLogin(fbRef, function (error, user) {
    console.log('resolving. ' + user.id + ', Provider: ' + user.provider);
    $scope.$apply(function () {
        deferred.resolve();
    });
});

答案 1 :(得分:0)

如果在@zsong写的$ apply()中包装resolve()但是使用$ rootscope吗?

resolve: {
    loadData: function ($q,$rootscope) {
        var deferred = $q.defer();
        var fbRef = new Firebase("https://myPathToFirebase");
        var auth = new FirebaseSimpleLogin(fbRef, function (error, user) {
            console.log('resolving. ' + user.id + ', Provider: ' + user.provider);
            $rootscope.$apply(deferred.resolve());
        });
        console.log('returning..');
        return deferred.promise;
    }
}