2

我在路由中的 resolve 成员上有以下代码:

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() 不起作用。代码不会继续运行控制器代码并渲染模板。就好像延期从未解决过一样。我有点卡在这里,任何帮助/建议将不胜感激谢谢

4

2 回答 2

1

我认为您可能需要像这样将 resolve() 包装在 $apply() 中

var auth = new FirebaseSimpleLogin(fbRef, function (error, user) {
    console.log('resolving. ' + user.id + ', Provider: ' + user.provider);
    $scope.$apply(function () {
        deferred.resolve();
    });
});
于 2013-08-02T18:38:41.740 回答
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;
    }
}
于 2016-03-03T11:03:28.910 回答