我對AngularJS還是比較新的,我想我無法理解$ scope的時機。在一個控制器中,我爲一些綁定到各種表單元素的模型數據設置了一個觀察器。當數據發生變化時,監視器會觸發ajax請求,除非表單無效。我正在使用myForm。$ valid檢查表單有效性。然而,除非在控制器中更新了模型數據,而且沒有形式,否則這非常簡單。驗證按預期運行,但形式。$ valid仍然具有先前的值,而不是更新後的數據。例如,如果表單先前是有效的,那麼我刪除綁定到所需輸入的模型值,觀察者將因爲模型數據已更改而觸發,但是當我記錄myForm。$ valid的值時,它的值仍然爲真,即使它應該是錯誤的。當模型數據在angularjs中的表單之外更改時,如何正確檢查觀察者中的表單有效性?
所以我的問題是A.爲什麼會發生這種情況?但更重要的是B.什麼是正確的方式來處理我想要完成的事情?自定義指令是否有意義?
這裏是一個簡化的例子。
HTML:
<div ng-controller="MyCtrl">
<form name="myForm">
<input type="text" name="myField" ng-model="myData" required>
<button type="button" ng-click="myData=''">Delete</button>
</form>
<div>
The watcher says the form is: <strong>{{ formStatus }}</strong>
</div>
</div>
控制器:
myApp.controller('MyCtrl', ['$scope', function($scope) {
$scope.myData = 'abc';
$scope.formStatus = '';
$scope.$watch('myData', function(newVal, oldVal) {
if (newVal != oldVal) {
console.log("my data changed");
console.log("my form valid = ", $scope.myForm.$valid);
$scope.formStatus = $scope.myForm.$valid ? 'Valid' : 'Invalid';
}
});
}]);
小提琴:http://jsfiddle.net/anpsince83/cK6cc/1/
似乎工作[在這個小提琴](http://jsfiddle.net/h9tUK/)。這是否符合您的期望? – KayakDave
會把手錶放在'$ valid'本身上嗎?像這樣:http://jsfiddle.net/h9tUK/1/ – KayakDave
嗯。小提琴肯定是在工作。在我的應用程序中,我有一個嵌套表單更復雜的設置,我想知道它是否與此有關。 – aaronp