sbo*_*sse 21 selection option angularjs
我有一个枚举(我使用TypeScript编写代码):
export enum AddressType
{
    NotSet = 0,
    Home = 1,
    Work = 2,
    Headquarters = 3,
    Custom = -1,
}
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中有一个名为type的字段,我在其中设置了应该在select输入中选择的初始值(我将其设置为AddressType.Headquarters).
最后,在我的HTML中我提出以下内容:
<select ng-model="Ctrl.type" ng-options="addressType for addressType in Ctrl.getAddressTypes()"></select>
Run Code Online (Sandbox Code Playgroud)
除了一件事之外,一切似乎都运行正常:由于某种原因,Angular在所有绑定更新后最初都没有在选择中选择"3"(总部).Angular会创建一个额外的选项,而不是:
<option value="?" selected="selected"></option>
Run Code Online (Sandbox Code Playgroud)
因此,由于某种原因,Angular无法确定在组合中选择的初始选项.
如果用户选择组合框的另一个选项,则Ctrl.type会正确更新,因此绑定对该部分的工作正常.基本上我的问题只是最初应该选择的选项未按预期选择.
我在这里错过了什么导致了这个问题?
sbo*_*sse 32
发现问题:
Ctrl.getAddressTypes()返回的数组是一个字符串数组:
["0", "1", "2", "3", "1"]
Run Code Online (Sandbox Code Playgroud)
并且Ctrl.type中存储的内容的类型为number.
AngularJS使用'==='运算符将提供给ng-options的数组与提供给ng-model的值进行比较.在这种情况下,3不等于"3" - 这就是为什么它不起作用.
Wil*_*ern 16
我经常在使用数字ID时遇到这种情况.我绕过这个怪癖的方法是添加''+将其转换为字符串类型:
<select ng-options="''+u.id as u.name for u in users"
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           33478 次  |  
        
|   最近记录:  |