【问题标题】:AngularJS Validation on Drop Down Not Working下拉菜单上的 AngularJS 验证不起作用
【发布时间】:2017-08-01 03:11:19
【问题描述】:

我的 AngularJS 表单上有多个下拉列表。当我提交表单时,只有一个下拉列表显示了所需的验证。下拉列表之间的唯一区别是来源。在一个不起作用的情况下,它使用一个对象并设置选项标签和值。在有效的下拉列表中,源是标准维度数组。有谁知道为什么对象源不起作用?

Plunker

<body ng-controller="MainCtrl">
<form name="myForm" novalidate>
  <div style="padding: 10px">
    <select name="TrailerType"
            ng-options="e as e.EquipmentDesc for e in Equipment"
            ng-model="TrailerType"
            required>
    </select>
    <p ng-show="myForm.$submitted">
        <span ng-show="myForm.TrailerType.$error.required">Required</span>
    </p>
  </div>
  <div style="padding: 10px">
    <select name="Hazmat"
            ng-options="h for h in HazmatYN"
            ng-model="Hazmat"
            required>
    </select>
    <p ng-show="myForm.$submitted">
        <span ng-show="myForm.Hazmat.$error.required">Required</span>
    </p>
  </div>
  <button>Sumbit</button>
</form>
</body>

$scope.Equipment = [
  { 'EquipmentDesc': 'Reefer', 'EquipmentId': 1 },
  { 'EquipmentDesc': 'Van', 'EquipmentId': 2 },
  { 'EquipmentDesc': 'Van or Reefer', 'EquipmentId': 3 },
  { 'EquipmentDesc': 'Flatbed', 'EquipmentId': 4 },
  { 'EquipmentDesc': 'StepDeck', 'EquipmentId': 5 },
  { 'EquipmentDesc': 'Removable Goose Neck', 'EquipmentId': 6 },
  { 'EquipmentDesc': 'Double Drop', 'EquipmentId': 11 },
  { 'EquipmentDesc': 'Tanker', 'EquipmentId': 30 },
  { 'EquipmentDesc': 'Rail/IMDL', 'EquipmentId': 34 }
];

$scope.HazmatYN = ['Yes', 'No'];

$scope.TrailerType = {};
$scope.Hazmat = "";

【问题讨论】:

    标签: angularjs validation


    【解决方案1】:

    您的第一个下拉列表名称错误。应该是“myForm”

    <p ng-show="myForm.$submitted">
        <span ng-show="myForm.TrailerType.$error.required">Required</span>
    </p>
    

    工作演示 :http://plnkr.co/edit/9EF1cJRRmK3rTDmh4cWE?p=preview

    【讨论】:

    • 你是对的,因为我有一个错字将实际代码转换为这个问题。我更正了代码并将初始化添加到显示的代码中。问题似乎是控制器中的默认值设置为 {} 而不是“”。任何想法为什么会出现这个问题?
    • 默认值是什么?我建议您将 ng-model 绑定到一个对象,例如 TrailerType.val 、 Hazmat .val 并且不要忘记在控制器中初始化您的对象。你会明白这里为什么使用对象更好的原因stackoverflow.com/questions/18128323/…
    • 这是一个简化的示例,可帮助您了解问题。在我的实际代码中,我确实将 ngModal 设置为一个对象。我所指的初始化发生在控制器中,并将对象值设置为 {}(参见我提供的代码)。当像这样设置对象默认值时,所需的 html 验证器不起作用。如果我将它设置为一个空字符串,它工作正常。只是好奇 {} 不起作用是否有原因。
    • 您不仅要在对象上声明它,还要在对象的键上声明它,例如 TrailerType.val 、 Hazmat .val。所以你只需要在你的控制器中初始化空对象。只需 $scope.TrailerType = {};在控制器中并使用 ng-model="TrailerType " 将不起作用。
    • @user2249672 如果有帮助,请标记为答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2014-09-19
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多