我正在使用 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
则可以正常工作。