2015-05-19 48 views
5

爲了簡化事情,我做了一個抽樣的形式來描述我的問題:爲什麼一個無效表單在第一個和最後一個無效後都是有效的?

<form novalidate name="form"> 
    <input required name="foo" ng-model="my.foo"> 
</form> 

,也是一個控制器:

angular.module('sample', []).controller('MainController', function($scope) { 
    $scope.$watch('form.$valid', function (valid) { 
    console.log(valid); 
    }); 
}); 

預期結果:

> false 

實際結果:

> true 
> false 

有人可以告訴我爲什麼起初表格是有效的,然後變得無效(順便說一句,它應該是什麼)?

Working demo

+1

可能在摘要期間初始化爲true,並在滿足所需輸入時稍後更改。只是一個猜測。 –

+0

@OmriAharon這正是發生的情況,但爲什麼?即使在初始化時它不應該無效嗎? – Carlos

+0

我想說,如果它還沒有遇到所需的輸入,那麼它不會知道它是無效的,因爲那時它只是一個空的形式。雖然如果我可以得到一些確認,但會很好,在任何資源中都沒有找到... –

回答

5

實際上,我相信這是由於指令優先。

在angularJS <form>實際上是一個指令。 required是另一個。

讓我們有一個沒有驗證的表單。該表格總是有效的。我很確定,現在我們可以說一個表單默認是有效的。

「form」指令的優先級高於「required」。這意味着一點。 Angular應用「表單」指令,而不是「必需的」指令。這會產生一個有效的表單,其輸入具有未知屬性「required」。下一個摘要將分析「必需」指令。它發現輸入爲空,並且設置爲false。正如Omri所說,它是指令優先級和消化週期的一部分。

相關問題