In this plunk我有ng-repeat
个输入字段。每个字段必须传递两个验证:(1)值不能为空,(2)如果num = 1
则值必须为数字。我在每行中使用ng-form
来独立验证值(我ng-repeat
内不能有<form>
。
问题是邮件显示不正确。要复制,in the plunk将1
添加到第三个字段。它变为b1
不是有效数字,但仍未显示Value should be a number
错误消息。再次更改值后会显示,例如b11
。问题在哪里以及如何解决?
HTML
<div ng-repeat="v in vals">
<ng-form name="formval">
<input type="text" name="val" ng-model="v.val" style="float:left"
ng-change="seeError(formval,v.num,v.val)" required/>
<div ng-show="!formval.val.$valid" ng-messages="formval.val.$error" class="errorMsg">
<div ng-message="shouldBeNumber">Value should be a number</div>
<div ng-message="required">Value cannot be empty</div>
</div>
{{ 'error row #' + $index}} {{formval.val.$error}}
<br/><br/><br/>
</ng-form>
</div>
的Javascript
var app = angular.module('app', []);
app.controller('ctl', function ($scope) {
$scope.vals = [
{val: 'a', num: 0},
{val: 2, num: 1 },
{val: 'b', num: 1}
];
$scope.seeError = function(form,num,value){
delete form.val.$error.shouldBeNumber;
if (value && value.trim()==="") // omit as form will show an error
return;
if (num===1) // should be a number
if (isNaN(parseFloat(value)))
form.val.$error.shouldBeNumber = true;
};
});
答案 0 :(得分:2)
我改变了你的一些代码。
请检查这个小提琴。
from openpyxl import load_workbook
import os
from os.path import exists
target_file = input('ex)201711 ')
wb = load_workbook(target_file + '.xlsm', data_only=True)
sheet = wb['summary']
num_people = len(sheet['A:A'])
for i in range(1, num_people):
val_1 = sheet.cell(row=i + 1, column=1).value
val_2 = sheet.cell(row=i + 1, column=2).value
val_3 = sheet.cell(row=i + 1, column=3).value
file_name = '2017(' + val_1 + ').xlsx'
if not exists(file_name):
continue
else:
wb = load_workbook(file_name, data_only=True)
sheet2 = wb['summary2']
sheet2.cell(row=1, column=1).value = val_1
sheet2.cell(row=1, column=2).value = val_2
sheet2.cell(row=1, column=3).value = val_3
wb.save(file_name)
我不确定我的小提琴是否适合你的目的,
但我希望这可以帮到你。 :)
答案 1 :(得分:2)
你应该先修复一些错误:
1)将此添加到 head -tag
vendor/
2)和JS
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.js"></script>
...然后
in html
var app = angular.module('app', ['ngMessages']);
JS中的
<input type="text" name="val" ng-model="v.val" style="float:left" required ng-model-sniffer/>
<div ng-messages="formval.val.$error" class="errorMsg">
<div ng-message="shouldBeNumber">Value should be a number</div>
<div ng-message="required">Value cannot be empty</div>
</div>
答案 2 :(得分:1)
当列表最初显示时,因为
而未触发更改只有在输入发生变化时才会评估ngChange表达式 value会将新值提交给模型。
不会评估:
- 如果$ parsers转换管道返回的值未更改
- 如果输入继续无效,因为模型将保持为空
- 如果以编程方式更改模型,而不是通过更改输入值
您可以使用自定义过滤器来实现相同的行为
HTML
<div ng-repeat="v in vals | filter:checkError">
</div>
JS
$scope.checkError = function (item) {
if(item.val is not number)
displayError = true;
return true;
};