为什么这款深表不会开火?
http://plnkr.co/edit/6FxMS4RlfljBMkprZYQs?p=preview
手表不检查角度属性吗? IE浏览器。那些用美元乞讨?如果是这种情况,有没有办法观察有效性变化,而不仅仅是在表格上,而是在任何输入上?
答案 0 :(得分:5)
解决方案是观看。$ error,这很好用。见http://plnkr.co/edit/6FxMS4RlfljBMkprZYQs?p=preview
这基本上就像在表单上观看有效一样,除非每次更新任何有效内容时都会更新。
答案 1 :(得分:2)
也许稍晚但我找到了另一种方式。使用:
$scope.$watchCollection
特别是你可以使用$ watchColletion在范围内观看myForm变量,并更新你的按钮或你需要的任何东西。
$scope.$watchCollection(function () {
if ($scope.myForm)
return $scope.myForm;
}, function () {
if ($scope.myForm)
if (($scope.myForm.$invalid == true))
$scope.formValidityChange(true);
else
$scope.formValidityChange(false);
}, true);
这将检查表单内更改的所有变量,您将更新控制器。我想你也可以通过比较两个对象来检查改变了什么,这可能会更困难。
答案 2 :(得分:0)
$ watch监视$ scope的变化。由于您的输入未绑定到正在监视的同一$ scope属性,因此您的监听侦听器仅在初始化时被调用一次。
为了更好地了解$ watch,binding和$ scope是如何工作的,这就是你的范围看起来的样子(实际上,你的范围是空的,因为你没有写任何东西,但这就是它看起来像是基于你的模板):
{
shizzle: { // <--- This is the property you're watching
$valid: false,
whatev: {
valid: false
}
},
whatev: "" // <--- This is the object that is changing when you type into the <input>
}
正如你所看到的那样,shizzle正在被观看,但不会改变,所以手表监听器只会被解雇一次。
以下是您的plunker的编辑版本,它将观察者绑定到输入的模型,并记录所有更改,以供演示:
http://plnkr.co/edit/NrE5blIbyBcsOjC2vIrk?p=preview
编辑:如果你的目标是观察$ valid属性,即设置了角度,那么你可以改变这一行:
scope.$watch(attrs.name, function(newVal, oldVal) {
console.log(newVal);
}, true);
到此:
scope.$watch("shizzle.$valid", function(newVal, oldVal) {
console.log(newVal);
}, true);