![](/img/trans.png)
[英]Angular unknown provider when trying to get a constant from another module
[英]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.