给定以下 Angular select2 控制器:
<select ui-select2 id="projectListSelection" data-placeholder="Select a Project ..." ng-model="selectedProject">
@*ng-options="project.WebsiteName for project in projectList"*@
<option value=''></option>
<option ng-repeat="project in projectList" ng-value="'{{ project.WebsiteGUID }}'">{{project.WebsiteName}}</option>
</select>
从控制器中检索模型数据如下:
$scope.projectList = dataFactory.getList("") // no parameters
.success(function (result) {
$scope.projectList = result.value;
$("#projectListSelection").select2({ width: '240' });
})
.error(function (error) {
customUIFunctions.showError("Data Error - Unable to Load Project List"); // use default error message
console.log("data error");
});
这是问题:
- 当控件第一次出现在屏幕上时,它看起来像一个普通的旧
select
下拉控件 - 在几分之一秒内,它的宽度变为 0
- 控件的 UI 再次更新为看起来像
select2
控件,但其宽度仅与占位符一样小 - 控件加载数据后,将其大小调整为 240px
当我尝试在检索数据之前(之前$scope.projectList = ...
)设置宽度时,出现以下错误:
未为 Select2 s2id_projectListSelection 定义查询函数 ... angular.js:9402 RangeError:超过最大调用堆栈大小 ...
这是有道理的,因为 DOM 没有完全加载。所以...
$(document).ready(function () {
$("#projectListSelection").select2({ width: '240' });
});
但是我仍然看到同样的问题,其中宽度首先符合占位符,然后在加载数据后符合更宽的设置。
我设法解决了这个问题:
<select ui-select2 id="projectListSelection" style="width:240px;" . . .
然而,这有点丑陋。
问题:
- 无论是否加载数据,是否有一个宽度选项适用?
- 是否有一个占位符选项可以让我显示诸如“正在加载数据...”之类的消息,然后显示不同的消息,即。加载数据后“选择一个项目...”?