我需要获取一个在app.js中保存在我的控制器上的令牌,所以我创建了一个服务
var app = angular.module('UnikaPage', ['LocalStorageModule','RutasModule','UploadModule']);
app.service('AuthService', function() {
var kc = {};
var setKeycloak = function(keycloak) {
kc = keycloak;
};
var getKeycloak = function(){
return kc;
};
return {
setKeycloak: setKeycloak,
getKeycloak: getKeycloak
};
});
我的其他模块是UploadModule
var upload = angular.module('UploadModule', [ 'ngResource','flow','UnikaPage' ]).config(
[ 'flowFactoryProvider', 'AuthService', function(flowFactoryProvider,AuthService) {
AuthService.getKeycloak();
flowFactoryProvider.defaults = {
target : '/ng-flow-java/upload',
permanentErrors : [ 500, 501 ],
maxChunkRetries : 1,
chunkRetryInterval : 5000,
simultaneousUploads : 4,
progressCallbacksInterval : 1,
withCredentials : true,
method : "octet"
};
flowFactoryProvider.on('catchAll', function(event) {
console.log('catchAll', arguments);
});
// Can be used with different implementations of Flow.js
// flowFactoryProvider.factory = fustyFlowFactory;
} ]);
但我得到的AuthService未定义,我尝试在UnikaPage中没有加载UploadModule,我没有收到错误,但我的UploadModule不会加载。
我是否可以在UnikaPage和UploadModule
上遇到循环依赖问题答案 0 :(得分:2)
你不能在配置阶段调用一些东西。例如,如果您需要在配置上设置Upload Module
,但同时需要运行AuthService
,则无法执行此操作,因为此阶段是设置服务。
您可以使用一个UploadModule
拦截器拦截AJAX ($http)
$http
个调用,评估您需要处理的内容,然后让请求进行。
在这里,在Angular.js API Reference(假设您使用的是1.2.x版)上,您可以看到如何设置拦截器,即时处理请求:https://code.angularjs.org/1.2.28/docs/api/ng/service/ $ http#拦截器。
另外,要记住的另一件事是,您需要提供一种方法,在AuthService
发送内容之前加载UploadModule
及其令牌等填充requestError
。如果您需要识别可能发生的401 (Not Authorized)
,例如,返回ngFlow
,您也可以为此设置拦截器,因此您可以调用登录窗口,例如,获取凭据用户。
我看到flowInit
的代码......您正在使用flowInit
指令来运行,不是吗?因此,您可以将指令config()
传递给控制器中的对象,并扩展您在flow.js
阶段定义的默认值。按照原始headers
选项,您可以定义<div flow-init="flowOptions">
...
</div>
属性,您可以在其中定义该情况的标题。
angular.controller('Ctrl', ['$scope', function ($scope) {
$scope.flowOptions = {
headers: {
'Authorization': 'token-here'
}
};
}]);
在控制器上:
defaults
最终删除了在config()上定义的flowInit
,让控制器定义了整个angular.extend()
选项。
查看ngFlow的源代码,可以看到它们使用的是在对象内部没有递归遍历的本地 override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?{
return sortedGroups[section].name
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.groupsKnown[section].tags.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("textInputCell", forIndexPath:indexPath) as! TagCell
if self.tagsKnown.count != 0 {
fetchKnownTags()
var indexPathRow = (indexPath.row)
let group = groupsKnown[indexPath.section].tags[indexPathRow]
//return other cells
self.deleteButton.hidden = false
cell.TagNumberTxt.font = StoryBoard.myFont
cell.TagNumberTxt.textColor = StoryBoard.cellColour
cell.TagNumberTxt.text = "\(group.tagNumber)"
}
return cell
}
。在此处阅读更多内容:http://docs.angularjs.org/api/ng/function/angular.extend
答案 1 :(得分:1)
删除循环依赖项。将AuthService
移至自己的模块
angular.module('AuthModule', [])
.factory('AuthService', function() {
var kc = {};
// etc
});
然后将其添加到UploadModule
依赖项
angular.module('UploadModule', ['ngResource', 'flow', 'AuthModule'])