gpt4 book ai didi

javascript - 扩展第 3 方 Angular Directive(指令)并更改其模板

转载 作者:行者123 更新时间:2023-11-28 13:29:05 25 4
gpt4 key购买 nike

我正在使用 Daniel Crisps AngularJS 范围 slider https://github.com/danielcrisp/angular-rangeslider并希望扩展他的指令并修改模板。

他的指令看起来像这样(因空格而缩短):

angular.module('ui-rangeSlider', [])
.directive('rangeSlider', [
function () {
return {
restrict: 'A',
replace: true,
template: ['<div class="ngrs-range-slider">',
'<div class="ngrs-runner">',
'<div class="ngrs-handle ngrs-handle-min"><i></i></div>',
'<div class="ngrs-handle ngrs-handle-max"><i></i></div>',
'<div class="ngrs-join"></div>',
'</div>',
'<div class="ngrs-value-runner">',
'<div class="ngrs-value ngrs-value-min" ng-show="showValues"><div>{{filteredModelMin}}</div></div>',
'<div class="ngrs-value ngrs-value-max" ng-show="showValues"><div>{{filteredModelMax}}</div></div>',
'</div>',
'</div>'].join('')
}
}
]);

我一直在尝试使用这个问题中的建议Extending Angular Directive通过将我的指令命名为完全相同的名称(例如缩短):

angular.module('myDirective', [])
.directive('rangeSlider', [
function () {
return {
restrict: 'A',
priority: 500,
template: ['<div></div><div></div>'].join('')
}
}
]);

但我收到以下错误:多个指令 [rangeSlider, rangeSlider] 请求模板:

以前有人遇到过这个问题吗?我如何在不修改源代码的情况下更新原始模板?

编辑:在我的示例中有一个额外的“)”。

最佳答案

我发现了一种方法,允许您修改第三方模板,而无需触及其代码,并且 AngularJS 中不会出现任何错误。这与您的尝试有点不同,您不是在自己的模块上定义具有相同名称的指令,而是使用 module.config() 来装饰第三方模块上的指令>$提供

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.js"></script>
<script>
// third-party code - cannot be modified
angular.module('ui-rangeSlider', []).directive('rangeSlider', [function() {
return {
restrict: 'A',
replace: true,
template: '<div>base</div>'
};
}]);

// this is your extension overriding the original template
angular.module('ui-rangeSlider').config(['$provide', function($provide) {
$provide.decorator('rangeSliderDirective', function($delegate) {
var dir = $delegate[0];

dir.template = ['<div>', dir.template, '<div>extended</div></div>'].join('');

return $delegate;
})
}]);

// this is your app
angular.module('sample', ['ui-rangeSlider']);
</script>
<body ng-app="sample">
<div range-slider></div>
</body>

您可以通过 https://jsfiddle.net/sjxwLe4k/4/ 实时尝试此操作.

关于javascript - 扩展第 3 方 Angular Directive(指令)并更改其模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26611159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com