我将 keycloak 库导入 angularjs,并在成功执行“init 方法”后,使用我想要使用的属性(例如:令牌)更新“service.keycloak”对象。在另一个控制器中调用我的服务时,对象“service.keycloak”没有加载像 init 方法中的属性。我怎样才能做到这一点?
我的服务工厂:
(function TBayKeycloak(angular) {
"use strict";
var app = angular.module('TBayKeycloak',[]);
app.factory('KeycloakService', ['$window',
function KeycloakService($window,) {
var service = {};
service.init = function init() {
service.keycloak = new Keycloak({
url: 'http://localhost:8200/auth',
realm: 'master',
clientId: 'bpms-dev'
});
service.keycloak.init({
onLoad: 'login-required'
}).then(function (auth){
if(auth){
//Here my object "service.keycloak" load properties with success
$window.location = window.location.origin + '/main.html';
}else{
console.log("authentication failed");
}
}).catch(function(error) {
console.log('failed to initialize');
});
}
service.getKeycloakInstance = function getKeycloakInstance(){
//But here the object never loaded properties
return service.keycloak;
}
service.getToken = function getToken(){
if(service.keycloak){
return service.keycloak.token;
}
}
return service;
}]);
})(angular);
以及具有来自服务的调用方法的控制器:
app.controller('TitleCtrl', ['$scope', '$rootScope', '$location', 'CoreRes','KeycloakService',
function ($scope, $rootScope, $location, CoreRes, KeycloakService) {
//Here returns the object incomplete
var keycloak = KeycloakService.getKeycloakInstance();
}
]);