我正在尝试让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
模块,因此从理论上讲,我的代码应该可以工作。
谁能想到一个不会的原因?
答案 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;
}
]);