IE,ng-repeat select 剪切文本或显示 {{}}

IE, ng-repeat for select cutting text or showing {{}}

基本问题

我有一个多select(列表),这取决于我如何编写 html/angular 有一个错误。在第一种情况下,最后 3 个字符从渲染中被截断。在第二种情况下,在单击该项目之前,名称不可见,而是 {{}} 占位符。

我只是想要一种以正确方式显示元素而没有错误的方法。

最后,如果在页面 select 呈现后将元素添加到 categories 数组,似乎会发生此行为。

使用 ng-bind

<select id="categories" name="categories" class="ep_field sumoSelect" multiple="multiple"
        ng-model="selectedCategories"
        ng-change="angularCategorySelectedGrants($event)"
   <option ng-repeat="cat in categories" value="{{cat.id}}" ng-bind="cat.name"></option>
</select>

没有 ng-bind

<select id="categories" name="categories" class="ep_field sumoSelect" multiple="multiple"
        ng-model="selectedCategories"
        ng-change="angularCategorySelectedGrants($event)"
   <option ng-repeat="cat in categories" value="{{cat.id}}">{{cat.name}}</option>
</select>

使用 ng-options

使用 ng-options 一切都会出现,但我无法真正点击元素 select 它们 - 它们被冻结了。

<select id="categories" name="categories" class="ep_field sumoSelect" multiple="multiple"
    ng-model="selectedCategories"
    ng-change="angularCategorySelectedGrants($event)"
    ng-options="cat.name for cat in categories track by cat.id" >
</select>

由于没有人写答案,请将我自己的解决方法视为已接受的答案。

我自己的解决方法

似乎问题出在初始渲染发生后向 categories 数组添加项目。我发现了两个解决方法:

  1. 只将所有元素添加到数组一次而不再添加 OR
  2. 隐藏 dom select 元素利用 ng-if 100ms 并使其再次可见。这会强制浏览器重新呈现元素并正确呈现它们。

在HTML中(包装select):

<div ng-if="categories!=undefined && categoriesLoaded">
    ...Select code here...
</div>

在控制器中(Javascript):

$scope.categoriesLoaded = false;
//Trigger render
$timeout(function(){  $scope.categoriesLoaded = true;}, 0);