代码之家  ›  专栏  ›  技术社区  ›  r3plica

未知提供程序:uibcarouselprovider尝试更改其模板时

  •  0
  • r3plica  · 技术社区  · 6 年前

    我正试图让angularjs能够很好地使用本地模板来覆盖引导模板。 我最初使用的是相同的文件路径(例如uib/template/carousel/carousel.html),在发布时很好,但在本地它不起作用。

    所以,我找到了这个溶质: Angular ui bootstrap directive template missing

    他们说你可以用 $提供 服务。 所以我做到了:

    'use strict';
    
    angular.module('core').config(coreConfig);
    
    function coreConfig($provide) {
        $provide.decorator('uibCarousel', function ($delegate) {
            console.log($delegate[0]);
            $delegate[0].templateUrl = 'bootstrap/carousel/carousel.html';
            return $delegate;
        });
    };
    

    这应该管用。 我的 核心 模块如下所示:

    'use strict';
    
    angular.module('core', [
        'ngCookies',
        'ngNotify',
        'ngResource',
        'ngSimpleCache',
        'ui.bootstrap',
        'ui.bootstrap.tpls',
        'ui.router', 
        'ui.select',
    
        // -- remove for brevity -- //
    ]);
    

    如你所见,我有 ui.bootstrap.tpls 模块已加载,因此理论上,我的代码应该可以工作。 有人能想出一个它不会的原因吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Pop-A-Stash    6 年前

    抱歉,所有的评论垃圾邮件。我想我找到了你问题的答案。 你必须附加 Directive 在定义decorator时指向一个指令:

    function coreConfig($provide) {
        $provide.decorator('uibCarouselDirective', function ($delegate) {
            console.log($delegate[0]);
            $delegate[0].templateUrl = 'bootstrap/carousel/carousel.html';
            return $delegate;
        });
    };
    

    从文档中:

    对于不同的服务,装饰者有不同的规则。这是 因为服务是以不同的方式注册的。服务是 按名称选择,但是筛选和指令由 在名称末尾附加“filter”或“directive”。这个 提供的$delegate由服务类型决定。

    https://docs.angularjs.org/guide/decorators

    这是我自己(工作)代码中的一个示例:

    $provide.decorator("uibDatepickerPopupDirective", [
      "$delegate",
      function($delegate) {
        var directive = $delegate[0];
        // removed for brevity
        return $delegate;
       }
     ]);
    
    推荐文章