我创建了ui-router
一个状态,它有一个显示当前用户状态的视图。以下代码获取当前用户状态:
var sydney = sydney || {};
sydney.checkAuth = function() {
gapi.auth.authorize({
client_id : sydney.CLIENT_ID,
scope : sydney.SCOPES,
immediate : true
}, sydney.handleAuthResult);
}
sydney.handleAuthResult = function(authResult) {
if (authResult) {
// The user has authorized access
console.log("User is signed in");
} else {
// User has not Authenticated and Authorized
console.log("User is not signed in");
}
}
state
定义为:
$stateProvider
.state('route1', {
url: "/route1",
views : {
"headerView" : {
templateUrl : 'partials/header.html',
controller: 'LoginController'
},
"navigationView" : {
templateUrl : 'partials/navigation.html',
controller: 'NavigationController'
},
"contentView": {
templateUrl : 'partials/content1.html'
}
}
})
LoginController
: _
function LoginController($scope, $state) {
$scope.checkUserStatus = function() {
sydney.checkAuth();
}
}
我需要粘合所有这些部分,所以当headerView
显示 时,我可以显示用户状态(登录或未登录)。
我做的第一件事是在 中创建一个变量LoginController
来保存状态
$scope.userStatus = sydney.checkAuth();
问题是它sydney.checkAuth
依赖于在创建Google APIs Client Library for JavaScript
时未加载的LoginController
。所以我明白gapi is not defined
这完全有道理。
另一种解决方案是在加载$scope.userStatus
后初始化gapi
(在回调中)。但是你如何告诉控制器更新$scope.userStatus
呢?