AngularJS输入选择在ng-model中的整数值停止工作

时间:2015-11-17 19:11:15

标签: javascript c# angularjs angularjs-ng-model angularjs-select

我有一个使用WebApi和AngularJS在C#.NET中编写的应用程序。

在我的应用程序的某些点上,我使用ENUMS填充了一个带有选项的选择标记,因为由于这些值不在数据库中,所以我觉得不需要创建返回枚举的服务,因为我是使用剃刀页面,所以我可以直接使用枚举。

一切正常,直到我将角度版本更新为1.4.7,比此停止工作,我无法降级角度版本(出于某些企业原因)。

例如,我有这段代码

<div class="col-md-3 col-xs-12">
    <label for="qualificacaoCobreJunta" class="col-xs-12 control-label">@IsiCTB.Internationalization.Res.Controls.label_cobre_junta<span class="obrigatorio">*</span></label>
    <div class="col-xs-12">
        <select class="form-control" id="qualificacao-cobre-junta" name="qualificacaoCobreJunta" ng-model="qualificacao.cobrejunta"
                required>
            <option value="" id="cobrejunta-0">@IsiCTB.Internationalization.Res.Controls.label_prompt_selecione</option>
            <option id="optCobreJuntaCom" value="@IsiCTB.Entities.Enums.ComSem.Com.ToInt()">@IsiCTB.Entities.Enums.ComSem.Com.GetValueString()</option>
            <option id="optCobreJuntaSem" value="@IsiCTB.Entities.Enums.ComSem.Sem.ToInt()">@IsiCTB.Entities.Enums.ComSem.Sem.GetValueString()</option>
            <option id="optCobreJuntaAmbos" value="@IsiCTB.Entities.Enums.ComSem.Ambos.ToInt()">@IsiCTB.Entities.Enums.ComSem.Ambos.GetValueString()</option>
            <option id="optCobreJuntaNA" value="@IsiCTB.Entities.Enums.ComSem.NA.ToInt()">@IsiCTB.Entities.Enums.ComSem.NA.GetValueString()</option>
        </select>
        <div ng-show="formQualificacaoSubmitted" class="error-form-validation">
            <div ng-show="gerenciaQualificacoesSoldador.qualificacaoCobreJunta.$error.required">@IsiCTB.Internationalization.Res.Controls.label_obrigatorio</div>
        </div>
    </div>
</div>

从WebApi获取数据的代码。

QualificacaoService.get({ id: idQualificacao }, function (data) {
    $scope.qualificacao = data;
});

然后返回一个带有一堆属性的JSON对象,如:

{
  id: 1,
  cobrejunta: 2,
  anotherEnumField: 1,
  anotherEnumField2: 5,
  anotherEnumField3: 2
  ....
}

如果我在模型中有 qualificacao.cobrejunta =“2”(字符串)设置,则select指向右侧选项,但如果我有 qualificacao.cobrejunta = 2 < / strong>(整数)似乎没什么用。

无论如何要让它再次运行,或者唯一的(最好的)解决方案是克里特岛将要求API的服务,这个API将构建数组而不是返回使用ng-option的那个?

谢谢你们。

2 个答案:

答案 0 :(得分:3)

这在这里讨论。 您所要做的就是更改您的选择,如下所示 &lt; select class =&#34; form-control&#34; ID =&#34; qualificacao-COBRE军政府&#34;命名=&#34; qualificacaoCobreJunta&#34; NG-模型=&#34; qualificacao.cobrejunta&#34;需要     ng-options =&#34; entry.value as entry.label in [{value:@ IsiCTB.Entities.Enums.ComSem.Com.ToInt(),label:&#39; @ IsiCTB.Entities.Enums。 ComSem.Com.GetValueString()&#39;},{value:@ IsiCTB.Entities.Enums.ComSem.Sem.ToInt(),label:&#39; @ IsiCTB.Entities.Enums.ComSem.Sem.GetValueString( )&#39;},{value:@ IsiCTB.Entities.Enums.ComSem.Ambos.ToInt(),label:&#39; @ IsiCTB.Entities.Enums.ComSem.Ambos.GetValueString()&#39;} ,{value:@ IsiCTB.Entities.Enums.ComSem.NA.ToInt(),label:&#39; @ IsiCTB.Entities.Enums.ComSem.NA.GetValueString()&#39;}]&#34;&gt; ; &LT; /选择&GT;

答案 1 :(得分:0)

我认为Angular行为已经随1.4.8版本而改变。我遇到了同样的问题:我将一个值列表组合成一个组合(静态值),并动态分配值以通过控制器进行选择。它不是版本1.3.8的问题,但当选定的值保持空白时它与1.4.8不同。但我可以在视图中显示该值,并且它是正确的。

为我解决这个问题的方法是将静态值转换为包含该值的对象,并将其定义为控制器的开头(在分配值之前)。必须这样做很奇怪,但我没有找到另一种成功的方法。