我有一种情况,我希望在我的angular.module(...)。config()调用代码中访问.factory('Auth')。现在我意识到.factory('Auth')不是提供者,因此无法访问它。然而,我也知道内部有一个为此.factory('Auth')创建的提供程序。所以有一个简单的方法:
1. Convert a factory -> provider and then use the factory portion later as I currently use 'Auth'?
2. get access to the provider from the factory name 'Auth' so that I can simply pass it into .config()?
我知道角度作为用户而不知道内部并且很想轻易解决这个问题。非常感谢您的见解!
出现这个问题是因为我有一个使用'textAngular'模块的应用程序,它被配置为在.config()阶段提供控制按钮作为UI的一部分。例如:
$provide.decorator('taOptions', ['taRegisterTool', '$delegate', function(taRegisterTool, taOptions){
taRegisterTool('addImage', {
display: '<button type="button" class="btn btn-default ng-scope" title="Add Images Remote">' +
'<div class="addImage hideElement" ng-app="tracker2App" ' +
'ng-controller="FilesCtrl" ngf-select ' +
'addfile type="button" ng-model="images" ' +
'ngf-multiple="true" ngf-allow-dir="false" +
'accept="image/*"' +
'ngf-keep="true" ngf-keep-distinct="true" ' +
'ngf-reset-on-click="resetOnClick" ngf-reset-model-on-click="resetModelOnClick"></div>' +
'<span><i class="fa fa-file-image-o"></i><i class="fa fa-cloud-upload"></i></span></button>',
action: function (deferred) {
var self = this;
$('.addImage.hideElement').click();
self.deferred = deferred;
self.type='image';
return false;
},
addItems: function (files, passedScope) {
if (files) {
var embed='';
let bResetImages=true;
files.forEach(function(file) {
if (bResetImages) {
embed += '<img src="' + file.url + '" style="width:100%;">';
} else {
embed += '<img src="' + file.url + '">';
}
});
this.$editor().wrapSelection('insertHTML', embed);
}
if (typeof passedScope.$$childHead.deferred !== 'undefined') {
passedScope.$$childHead.deferred.resolve();
}
}
});
taOptions.toolbar[3].splice(4,0, 'addImage');
}]);
我需要能够将addItems:function(..)更改为:
addItems: function (files, passedScope) {
if (files) {
var embed='';
let bResetImages=Auth.getCurrentUser().options.bResetImageSize;
files.forEach(function(file) {
if (bResetImages) {
embed += '<img src="' + file.url + '" style="width:100%;">';
} else {
embed += '<img src="' + file.url + '">';
}
});
因此,当用户添加图像时,textAngular可以稍后访问currentUser.options。我希望这更清楚。
最后,我通过修改上面的addItems()函数并将我需要的数据作为第三个参数传递来解决这个问题。
关键的洞察力是认识到'html'代码使用ng-controller =“FilesCtrl”,因此这个控制器调用addItems()并可以访问我需要的所有内容。
再次感谢那些看过这个问题的人。当我有更多时间时,我可能会尝试采用某种混合解决方案来完全回答这个问题。