我正在尝试创建一个函数,该函数根据所选的出生日期自动计算一个人的年龄。
<div class="col-sm-3">
<label class="control-label">DOB</label>
<date-input name="{{member.MemberID + 'Birthdate'}}" max="controller.today" ng-model="member.NoServicesProvided.birthDate" ng-change="controller.calcAge(member)"></date-input>
</div>
<div class="col-sm-3" ng-class="{'has-error': noServicesProvidedForm[member.MemberID + 'Age'].$invalid && noServicesProvidedForm.rootFormSubmitted()}">
<label class="control-label">Age</label>
<input name="{{member.MemberID + 'Age'}}" type="text" maxlength="2" class="form-control input-sm" ng-model="member.NoServicesProvided.age" required valid-number>
</div>
function calcAge(member) {
if(member.NoServicesProvided.birthDate) {
var deltaDate = Date.now() - member.NoServicesProvided.birthDate.getTime();
var ageDate = new Date(deltaDate);
member.NoServicesProvided.age = Math.abs(ageDate.getUTCFullYear() - 1970);
console.log(member.NoServicesProvided.age);
}
}
首次输入日期时出现问题。当我选择一个日期时,出于某种原因,它说member.NoServicesProvided是未定义的。此NoServicesProvided属性正在页面上的其他位置使用,没有问题。然后,当我选择另一个日期时,它突然起作用,但是输入的是第一个日期,而不是第二个。
有什么我想念的吗?请知道我需要保持这种格式。任何帮助表示赞赏!
答案 0 :(得分:0)
找到了解决方案:
在calcAge函数中,将代码包装在$ timeout(function(){...});
中