未知提供者:尝试更改模板时出现 uibCarouselProvider
Unknown provider: uibCarouselProvider when trying to change it's template
我正在尝试让 angularjs 与覆盖 bootstrap 的本地模板很好地配合使用。
我最初使用相同的文件路径(例如 uib/template/carousel/carousel.html),这在发布时很好,但在本地它不起作用。
所以,我找到了这个解决方案:
Angular ui bootstrap directive template missing
他们说您可以使用 $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;
});
};
应该可以。
我的 core 模块如下所示:
'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;
});
};
来自文档:
Decorators have different rules for different services. This is
because services are registered in different ways. Services are
selected by name, however filters and directives are selected by
appending "Filter" or "Directive" to the end of the name. The
$delegate provided is dictated by the type of service.
https://docs.angularjs.org/guide/decorators
这是我自己的(工作)代码中的一个示例:
$provide.decorator("uibDatepickerPopupDirective", [
"$delegate",
function($delegate) {
var directive = $delegate[0];
// removed for brevity
return $delegate;
}
]);
我正在尝试让 angularjs 与覆盖 bootstrap 的本地模板很好地配合使用。 我最初使用相同的文件路径(例如 uib/template/carousel/carousel.html),这在发布时很好,但在本地它不起作用。
所以,我找到了这个解决方案: Angular ui bootstrap directive template missing
他们说您可以使用 $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;
});
};
应该可以。 我的 core 模块如下所示:
'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;
});
};
来自文档:
Decorators have different rules for different services. This is because services are registered in different ways. Services are selected by name, however filters and directives are selected by appending "Filter" or "Directive" to the end of the name. The $delegate provided is dictated by the type of service.
https://docs.angularjs.org/guide/decorators
这是我自己的(工作)代码中的一个示例:
$provide.decorator("uibDatepickerPopupDirective", [
"$delegate",
function($delegate) {
var directive = $delegate[0];
// removed for brevity
return $delegate;
}
]);