0

У меня есть приложение, написанное на C# .NET с использованием WebApi и AngularJS.Входной сигнал AngularJS с целым значением в ng-model stop working

В некоторых случаях в моем приложении я добавляю тег select с параметрами, используя ENUMS, потому что, поскольку значения не находятся в базе данных, мне не нужно создавать службу, возвращающую перечисления, m используя бритвенные страницы, чтобы я мог напрямую использовать перечисления.

Все работало нормально, пока я не обновил угловую версию до 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" (строка) заходящего в модели, выбор указывает на правильную опцию, но если у меня есть qualificacao.cobrejunta = 2 (целое число), чем ничего не работает.

В любом случае, чтобы это снова работало, или единственное (лучшее) решение - это служба, которая запросит API, и этот API построит массив и вернет его для использования ng-option?

Спасибо, ребята.

+0

В своем угловом коде попробуйте преобразовать значение в строку перед назначением модели, было бы неплохо, если вы также можете поделиться им с нами. – Fedaykin

+0

Вы имеете в виду использование $ watch в $ scope для преобразования в строку? Я не поставил свой угловой код, потому что я действительно ничего не делаю, просто отправьте его на мой webapi. –

+0

Везде, где вы выполняете назначение модели ... 'qualificacao.cobrejunta =" 2 "' Вы получаете значения из webapi или вы только отправляете их? Если это так, мы должны увидеть, что происходит по проводам. – Fedaykin

ответ

3

Об этом говорят here.

Все, что вам нужно сделать, это изменить ваш выбор, как показано ниже

<select class="form-control" id="qualificacao-cobre-junta" name="qualificacaoCobreJunta" ng-model="qualificacao.cobrejunta" required 
    ng-options="entry.value as entry.label for entry in [{value : @IsiCTB.Entities.Enums.ComSem.Com.ToInt(), label: '@IsiCTB.Entities.Enums.ComSem.Com.GetValueString()'}, {value: @IsiCTB.Entities.Enums.ComSem.Sem.ToInt(), label: '@IsiCTB.Entities.Enums.ComSem.Sem.GetValueString()'}, {value: @IsiCTB.Entities.Enums.ComSem.Ambos.ToInt(), label: '@IsiCTB.Entities.Enums.ComSem.Ambos.GetValueString()'}, {value:@IsiCTB.Entities.Enums.ComSem.NA.ToInt(), label: '@IsiCTB.Entities.Enums.ComSem.NA.GetValueString()'}]"> 
</select> 
+0

Спасибо за ваш ответ. Это действительно сработало. –

0

Я думаю, Угловое поведение изменилось с версии 1.4.8. У меня была та же проблема: у меня был список значений в комбо (статические значения), и я динамически назначил значение для выбора в контроллере. Это не проблема с версией 1.3.8, но с 1.4.8, когда выбранное значение остается пустым. Но я могу показать значение в представлении, и это правильно.

Способ решения этого для меня состоял в том, чтобы перевести эти статические значения в объект, содержащий эти значения, и определить его как начало контроллера (перед назначением значения). Странно это делать, но я не нашел другого пути к успеху.