2

我正在使用 Facebook JS 和 AngularJS 开发一个应用程序。首先,我登录,然后获取好友并将其显示在列表中。这段代码一切正常:

var friendsController = app.controller(
    "FriendsController",
    function FriendsController($scope, friendsData, $location, $routeParams)
    {
        $scope.friendsData = friendsData.data;
        $scope.params = $routeParams;

        $scope.onClickFriend = function(friendId)
        {
            $location.path("friends/friend:" + friendId);
        }
    }
);

friendsController.loadFriends = function($q, $rootScope)
{
    var deferred = $q.defer();

    FB.api("/me/friends?fields=name,picture.type(square)", function(response)
    {
        $rootScope.$apply(deferred.resolve(response));
    });

    return deferred.promise;
}

现在我想在新视图中加载朋友的详细信息,所以我创建了一个新视图routeProvider用一个新控制器和一个新承诺创建了一个新规则。

var friendDetailController = app.controller(
    "FriendDetailController",
    function FriendDetailController($scope, friendData, $routeParams)
    {
        $scope.friendData = friendData;
        $scope.params = $routeParams;

        console.log(friendData);
    }
);

friendDetailController.loadFriend = function($q, $route, $rootScope)
{
    var deferred = $q.defer();
    var friendUrl = $route.current.params.friendId.split(":")[1] + "?fields=id,name,picture.type(large)";

    FB.api("/" + friendUrl, function(response)
    {
        $rootScope.$apply(deferred.resolve(response));
    });

    return deferred.promise;
}

问题是我正在进入loadFriend但它似乎没有调用 FB.api,这真的很奇怪,因为它正在运行FriendsController,这基本上是相同的。

实际上,似乎是第二个未调用的调用,因为如果我反转调用(第一个FriendDetail,然后是朋友),FriendDetail则可以正常工作。

4

0 回答 0