我正在尋找一種方法來調用全局函數中指令中定義的控制器中的方法。我能夠成功地在模塊中定義控制器,並在正常的html元素中使用ng-controller聲明控制器。然後我得到了控制,並從javascript函數這樣的範圍:從javascript函數調用指令中定義的控制器中的方法
function signinCallback(authResult) {
var googleLoginControllerElement = document.getElementById('googlelogin');
var ctrlScope = angular.element(googleLoginControllerElement).scope();
var controller = angular.element(googleLoginControllerElement).controller();
ctrlScope.$apply(function() {
controller.signinCallBack(authResult);
});
}
但是當我移動控制器的指令定義的定義我無法找到一個方法來做到這一點(新控制器定義移動到指令)後,代碼:
var googleLogin = angular.module('GoogleLogin', []);
googleLogin.directive('googleLogin', function() {
return {
restrict: 'E',
controller: function() {
// Initialize google login api
(function() {
var po = document.createElement('script');
po.type = 'text/javascript';
po.async = true;
po.src = 'https://apis.google.com/js/client:plusone.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
})();
/*
* 1: not logged in.
* 2: logged in.
* 3: login failed.
* 4: logout failed.
*/
this.state = 1;
this.signinCallBack = function(authResult) {
if (authResult['status']['signed_in']) {
console.log('authResult: ' + JSON.stringify(authResult));
this.state = 2;
} else if (authResult.error === "user_signed_out") {
console.log('Sign-in state: ' + authResult['error']);
this.state = 1;
}
};
this.logout = function() {
try {
gapi.auth.signOut();
this.state = 1;
} catch(e) {
this.state = 4;
}
};
this.isLoggedIn = function() {
return this.state == 2;
};
},
controllerAs: 'googleLoginCtrl',
templateUrl: '../templates/google_login.html'
};
});
在我的HTML我使用該指令是這樣的:
<google-login></google-login>
謝謝!
爲什麼要從全局函數中調用該函數? – 2014-09-24 14:13:45
googleLoginCtrl在哪裏? – 2014-09-24 14:34:09
@Joao,全局函數由oauth登錄工作流調用。從那裏我想將控制流傳遞給我的角度模塊,提供誓言認證的結果(我的代碼中的authResult變量),以便我的角度模塊跟蹤登錄狀態。 – Cristobal 2014-09-26 13:41:38