我需要將ng-form設置爲無效,因爲它是嚮導的後面部分。該表單包含一個包含元素的網格。每個元素都有自己的驗證,但問題是當沒有元素時,表單顯示爲有效。當行數爲0時,我需要將它標記爲無效。如何做到這一點?設置窗體在angularjs中無效
8
A
回答
18
經過一番研究,下面的代碼對我來說工作的很好。在控制器中:
//Set the form as invalid for start.
$timeout(function(){
$scope.orderForm.productsForm.$invalid = true;
});
超時確保我們可以訪問表單。它們不是在第一次通過控制器時建立的,所以需要超時或監視。 然後我們將表單標記爲無效。更好的方法是找到一個輸入,我們可以使用ngModelController上的記錄的API $setValidity
標記爲無效,但在我的用例中沒有輸入,所以我們用一種骯髒的方式來做。
一個需要注意的是,當一個人直接像上面那樣設置$ invalid ===! $有效不變被破壞,所以要小心這個黑客。
1
我認爲以下是一個更清潔的解決方案。
$scope.$watch('myForm', function (a, b) {
$scope.myForm.$setValidity('custom', false, window); // 'custom' validation key, binds window as form control
});
我喜歡$watch
更好;最初,我要檢查「表單是否已經創建」,然後才設置有效性。
但它似乎並不是真的需要,表單是在$ watch執行初始時間之前創建的(所以不需要更改)。
$setValidity
似乎是ngForm API的一部分(我在form.js源代碼中發現它),它被表單控件自己使用,它們都設置$ valid和$ invalid。
相關問題
- 1. 在angular2中設置無效的無效窗體控件
- 2. 無法設置背景在Windows窗體
- 3. Django窗體無效
- 4. NicEdit窗體重置按鈕無效果
- 5. 如果子窗體手動設置無效,則角不會使父窗體無效
- 6. 如何在Windows窗體中設置窗體的位置.net 3.5
- 7. AngularJS窗體不在HTML中
- 8. 表單加載時無法設置窗體窗體焦點?
- 9. 窗體onsmitmit javascript無效
- 10. 將窗體設置爲父窗體#
- 11. AngularJS窗體,初始化時隱藏無效樣式?
- 12. 在窗體中設置errorContainer多次
- 13. 在窗體中設置默認值
- 14. 在Windows窗體中重寫設置
- 15. 在ASP.Net中設置窗體的高度
- 16. 在子窗體中設置篩選器
- 17. 如何在父窗體的中心設置子窗體?
- 18. 在angularjs 1.5組件設置有效期
- 19. 無法在Windows窗體文本框中設置焦點
- 20. AngularJS中的彈出窗口和窗體中的相對位置
- 21. 在Rails中設置渲染窗體的默認設置
- 22. AngularJS - 重置窗體清除模型
- 23. Tomcat:在server.xml中設置connectionTimeout無效
- 24. 用C#設置Windows窗體#
- 25. PHP設置窗體值
- 26. 設置窗體的父項
- 27. AngularJS無法設置值textarea
- 28. 動態AngularJS窗體
- 29. 在窗體內設置窗體變量(coldfusion)
- 30. 在窗體中清除窗體(不重置窗體)
可能重複[Angularjs:如何手動設置輸入$控制器中有效?](http://stackoverflow.com/questions/15437435/angularjs-how-do-i-manually-set-input-to在控制器中有效) –
如果該問題沒有標記答案,並且提供了一個不可能做到的狀態,那該如何重複?雖然這顯然是可以做到的,我在答案中證明了這一點。這就是爲什麼這個問答在這裏。所以人們可以找到。 – stride