我可以访问工厂内置的固有提供商吗?

时间:2016-06-21 21:40:45

标签: angularjs

我有一种情况,我希望在我的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()并可以访问我需要的所有内容。

再次感谢那些看过这个问题的人。当我有更多时间时,我可能会尝试采用某种混合解决方案来完全回答这个问题。

0 个答案:

没有答案