我正在使用ui.bootstrap.progressbar(代码在这里:https://github.com/angular-ui/bootstrap/blob/master/src/progressbar/progressbar.js),我正在尝试扩展它以支持progess栏上的一些自定义HTML(或只是文本)。在vanilla Bootstrap中它看起来像这样:
<div class="progress">
<div class="bar" style="width: 60%;">This thing is at 60%</div>
</div>
http://plnkr.co/edit/WURPlkA0y6CK7HYt3GL1?p=preview
我是指令的新手,所以我这就是我的尝试:
在ProgressBarController
中我添加了label
变量
var label = angular.isDefined($attrs.label) ? $scope.$eval($attrs.label) : '';
还修改了控制器返回的对象以包含标签。然后在指令的模板中添加bar.label
,如下所示:
<div class="progress">
<progressbar ng-repeat="bar in bars"
width="bar.to" old="bar.from"
animate="bar.animate" type="bar.type">
</progressbar>
{{bar.label}}
</div>
进度条看起来很好,但我看不到标签的值。
我做错了什么?提前谢谢。
答案 0 :(得分:0)
事实证明这非常简单。
我所要做的就是:
progress
指令并添加transclude: true
progress.html
以包含ng-transclude
指令,如此
<div class="progress">
<span ng-transclude></span>
<progressbar ng-repeat="bar in bars" width="bar.to" old="bar.from" animate="bar.animate" type="bar.type"></progressbar>
</div>
在此之后,放在<progressbar></progressbar>
之间的文本将在进度条上呈现,但是也需要一些CSS修改才能使文本显示在正确的位置。
但是每个进度条和每个文本都需要额外的定位,所以这部分仍然不是一个完整的解决方案。将包装器的位置设置为relative,将<span>
设置为绝对是一步但仍然不够。