在控制器上使用“$watch”时,为什么不更新此隐藏字段
Why is this hidden field not updated when `$watch` is used on the controller?
我有这样的表格:
business-validation
是一个自定义指令,其代码为:
var CREDIT_CARD_REGEX = /^'d{0,24}$/;
angular.module('directives').directive('creditCard', [
function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
scope.$watch(attrs.creditCard, function (newValue) {
return ctrl.$setViewValue(ctrl.$viewValue);
});
return ctrl.$parsers.push(function (viewValue) {
var newValue;
newValue = ctrl.$modelValue;
element.validateCreditCard(function (result) {
if (result.card_type &&
result.luhn_valid &&
result.length_valid &&
CREDIT_CARD_REGEX.test(element.val())) {
element.attr("data-card-type", result.card_type.name);
ctrl.$setValidity('creditCard', true);
newValue = viewValue;
}
else {
element.removeAttr("data-card-type");
ctrl.$setValidity('creditCard', false);
}
}, { accept: ['visa', 'mastercard'] });
return newValue;
});
}
};
}]);
我需要控制器上myForm.anInputName.$error.creditCard
的值,为此我做了一些尝试,还有一些类似的东西:
<input type="hidden" ng-model="IsCreditCardValid" name="IsCreditCardValid" value="myForm.anInputName.$error.creditCard" />
和
$scope.$watch("IsCreditCardValid", function (newValue, oldValue) {
alert('theChangeHasBeen:' + oldValue + ' -> ' + newValue);
});
为了在控制器处$watch
IsCreditCardValid
。
本段显示:
<p class="help-block" ng-if="smyForm.anInputName.$error.creditCard && !myForm.anInputName.$error.required">Wrong credit card number!</p>
但是隐藏的输入即使使用相同的条件也永远不会得到期望的值。为什么最后一个隐藏字段没有更新,$watch
也从未触发?
编辑
如果我这样做
myForm.anInputName.$valid:{{myForm.anputName.$invalid}}该值会在屏幕上更新,但隐藏字段不会更改其值。
ngModel
仅适用于列出的输入类型,而hidden不在其中。input
指令的内部提示它不会自动处理所有可能的输入:
var inputType = {
...
'hidden': noop,
'button': noop,
'submit': noop,
'reset': noop,
'file': noop
}
这是有道理的,因为隐藏的输入不需要双向绑定(在Angular应用程序中也没有必要)。如果你无论如何都想使用它们,那么
<input type="hidden" name="IsCreditCardValid" value="{{ IsCreditCardValid }}" />
相关文章:
- 在控制器上使用“$watch”时,为什么不更新此隐藏字段
- 当我从有界数据派生输出时,为什么我的自定义指令不更新
- 为什么在更新输入类型文本的值时,敲除不更改值属性
- 为什么 Collection.fetch() 不更新视图
- 在角度中,为什么我的 ng-show 不更新以反映当前范围
- D3 - 为什么此排序函数不更新其选择中的所有元素
- 角度为什么值不更新
- 为什么模型更改时$watch不更新
- 为什么这个 emberjs 模板不更新
- 为什么Javascript对象不更新字段
- 为什么不是't我的状态正在更新
- 为什么不't我的网页用JavaScript更新计时器
- 为什么我的 ko 计算的可观察量在其值更改时不更新绑定的 UI 元素
- angular js:为什么$scope.product如果是变量就不更新,如果是函数就不更新
- 为什么不是't使用按钮栏时,PageDown编辑器触发Knockout值更新
- 为什么$scope中的变量不更新
- 为什么不是't我的cookie更新
- 为什么不更新turnCount ?
- 为什么不更新D3 SVG图形上的轴?
- 为什么不更新这个元素的宽度?JQuery