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
数组添加项目。我发现了两个解决方法:
- 只将所有元素添加到数组一次而不再添加 OR
- 隐藏
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);
基本问题
我有一个多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
数组添加项目。我发现了两个解决方法:
- 只将所有元素添加到数组一次而不再添加 OR
- 隐藏
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);