1

我正在使用 angular-ui 的 ui-select2。我想为选择添加自定义 html 格式。Select2 通过在其配置中指定 formatSelection 来实现这一点。

我有如下带有角度标签的html,我想用它来格式化选择-

var format_code = $compile('<div ng-click="showHide=!showHide" class="help-inline"><div style="cursor: pointer;" ng-show="!!showHide" ng-model="workflow.select" class="label">ANY</div><div style="cursor: pointer;" ng-hide="!!showHide" ng-model="workflow.select" class="label">ALL</div></div>')( $scope );


 var format_html = "<span>"  + data.n + ' : ' + data.v +' ng-bind-html-unsafe=format_code'+ "</span>"

$scope.select_config = {
    formatSelection: format_html
}

如果我像上面那样编译 html 并分配它,我只会在浏览器中看到一个 [object,object] 呈现。如果我不编译它,我会看到正确呈现的 html,但不会发生角度绑定,即点击不起作用。

有什么想法有什么问题吗?

4

1 回答 1

2

我遇到了同样的问题,select2 在 jquery 对话框中加载,而不是使用我会给它的选项对象。

我最终做的是隔离指令中的元素,如下所示:

  define(['./module'], function (module) {
    return module.directive('dialogDirective', [function () {
      return {
        restrict: 'A',
        controller: function ($scope) {
          console.log('controller gets executed first');
          $scope.select2Options = {
            allowClear: true,
            formatResult: function () { return 'blah' },
            formatSelection: function () { return 'my selection' },
          };
        },
        link: function (scope, element, attrs) {
          console.log('link');
          scope.someStuff = Session.someStuff();

          element.bind('dialogopen', function (event) {
            scope.select2content = MyResource.query();
          });
        },
      }
    }]);

和标记

   <div dialog-directive>
          {{select2Options}}
          <select ui-select2="select2Options" style="width: 350px;">
            <option></option>
            <option ng-repeat="item in select2content">{{item.name}}</option>
          </select>
          {{select2content | json}}
        </div>

这里重要的是:

'controller' 函数在 html 被渲染之前被执行。这意味着当 select2 指令被执行时,它已经初始化了 select2Options 对象。

'link' 函数使用 MyResource $resource 异步填充 select2content 变量。

继续尝试,您应该会看到下拉列表中的所有元素都显示为“blah”,而选定的元素应显示为“我的选择”。

希望这会有所帮助,这是我第一次发帖。

于 2014-02-20T21:33:01.193 回答