0

我在 AngularJs 中构建单页应用程序,我需要调用 Facebook UI 对话框。如果用户单击“确定”或“取消”,successReport 方法不会立即调用。我单击页面中的任何按钮或链接后调用此方法。类似于内部队列

 service.showStreamDialog=function (json) {
    if (json.stream) {
        var newCardSentId = json.cardSentId;
        FB.ui(json.stream, function (resp) {
            if (resp && resp.post_id) {
                reportService.successReport(newCardSentId,newCardSentId,resp.post_id);
            } else {
                reportService.cancelReport(newCardSentId);
            }

        });
    }
};

// 在其他文件中

var successReport=function(cardId,cardSentId,postId){
    var defered = $q.defer();
    $http.post(reportUrl,$.param({
        cardId:cardId,
        cardSentId:cardSentId,
        postId:postId,
        accessToken: ACCESS_TOKEN
    }))
    .success(function(data){
        defered.resolve(data);})
    .error(function(data){
       defered.reject(data);
    });

    return defered.promise;

};

我发现了问题。它在我的应用程序中集成 facebook api。我添加了 $rootScope.$apply 调用,并且所有工作都按我预期

service.showStreamDialog = function (json) {
        if (json.stream) {
            var newCardSentId = json.cardSentId;
            FB.ui(json.stream, function (resp) {
                if (resp && resp.post_id) {
                    $rootScope.$apply(function () {
                        $rootScope.$broadcast('CARD_SENT_SUCCESS', {cardSentId: newCardSentId,post_id:resp.post_id});
                    });
                } else {
                    $rootScope.$apply(function () {
                        $rootScope.$broadcast('CARD_SENT_CANCEL', {cardSentId: newCardSentId});
                    });
                }

            });
        }
    };
4

0 回答 0