繁体   English   中英

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

[英]Unknown provider: uibCarouselProvider when trying to change it's template

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

因此,我发现此解决方案: 缺少Angular ui bootstrap指令模板

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

'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模块,因此从理论上讲,我的代码应该可以工作。 谁能想到不会的原因?

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

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;
   }
 ]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM