【问题标题】:uib-popover-template not showinguib-popover-template 未显示
【发布时间】:2025-12-14 10:05:02
【问题描述】:

我正在尝试在字体真棒图标上使用uib-popover-template 作为一种设置菜单,但无法显示弹出窗口。这是我正在使用的页面的标题:

    <h3>{{vm.title}}
      <i class="fa fa-ellipsis-v pull-right"
          aria-hidden="true"
          uib-popover-template="'options-panel.html'"
          popover-placement="left"></i>
    </h3>

我在右上角的省略号有点像“更多选项”菜单。 options-panel.html 只是 4-5 个 &lt;select&gt; 下拉列表,具体取决于如下所示的页面:

<div class="row">
  <div class="form-group col-md-12">
    <label for="viwemode">View&nbsp;Mode</label>
    <select id="viewmode"
        class="form-control"
        ng-model="vm.currentViewer"
        ng-options="view for view in vm.views"
        ng-change="vm.viewChange();"></select>
  </div>
  <div class="form-group col-md-12"
      ng-repeat="viewOption in vm.genericOptions">
    <label for="{{viewOption.label}}">{{viewOption.label}}</label>
    <select id="{{viewOption.label}}"
        class="form-control"
        ng-model="vm.config[viewOption.label]"
        ng-options="v as k for (k,v) in viewOption.values"
        ng-change="vm.optionChange(viewOption.label);"></select>
  </div>
  <div class="form-group col-md-12"
      ng-repeat="viewOption in vm.viewerOptions">
    <label for="{{viewOption.label}}">{{viewOption.label}}</label>
    <select id="{{viewOption.label}}"
        class="form-control"
        ng-model="vm.config[viewOption.label]"
        ng-options="value for value in viewOption.values"
        ng-change="vm.optionChange(viewOption.label);"></select>
  </div>
</div>

最后在类的控制器中,我只有这个对象,其中包含模板 url:

vm.popover = {
  template: '<a href uib-popover-template="\'options-panel.html\'" popover-placement="left"></a>'
};

我不确定我错过了什么,但即使是弹出框也不会显示,更不用说带有我的模板的弹出框了。如果我只是用uib-popover="test" 做省略号(fa-icon),弹出框会显示“test”,所以我确实正确安装了 uib 依赖项。

【问题讨论】:

    标签: javascript css twitter-bootstrap angular-ui-bootstrap


    【解决方案1】:

    考虑一下uib-popover-template plunker

    我不知道你的数据结构,但应该可以。

    你不需要了

    vm.popover = { 
      template: '<a href uib-popover-template="\'options-panel.html\'" popover-placement="left"></a>'
    };
    

    【讨论】:

      【解决方案2】:

      这一行

      uib-popover-template="'options-panel.html'"
      

      应该是

      uib-popover-template="options-panel.html"
      

      请注意,我删除了单引号,uib-popover-template 接受一个表达式,该表达式将计算为您的 $scope 上的模板位置。通过在单引号中传递模板路径,您只是将纯字符串作为表达式传递。

      来自Docs

      uib-popover-template - 表示用于弹出框主体的模板位置的 URL

      【讨论】:

      • 我不确定您是否使用了其他版本,但我遇到了类似的问题,并且没有单引号,弹出框不起作用。使用单引号,它实际上可以工作。
      • 它必须有引号,因为它是一个角度表达式。否则它将尝试查找名为options-panel 的范围对象变量,其属性为html