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

时间:2018-07-06 13:49:49

标签: angularjs angularjs-bootstrap

我正在尝试让angularjs与覆盖自举模板的本地模板很好地玩。 我最初使用的是相同的文件路径(例如,uib / template / carousel / carousel.html),在发布时可以使用,但在本地不起作用。

所以,我找到了这个解决方案: Angular ui bootstrap directive template missing

他们说您可以使用 $ provide 服务用新的网址覆盖模板。 所以我做到了:

'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 个答案:

答案 0 :(得分:1)

对不起,所有评论垃圾邮件。我想我已经找到您问题的答案。 定义装饰器时,必须在指令后附加Directive

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

从文档中

  

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

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

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

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