2014-01-27 31 views
1

我正在使用我正在建立的角度指令中的一些驗證功能。但是,該指令可能也可能不在表格內。有沒有辦法訪問模型的驗證狀態而不嘗試訪問表單的狀態? 我的模板是沿着線....沒有表格的角度模型驗證

<select id="{{$id}}key" ng-model="newItem.key" 
    ng-options="key as key.label for key in tableKeys" required> 
</select> 
<span class="error" ng-show="newItem.key.$error.required">Required!</span> 
<input id="{{$id}}value" type="text" ng-model="form.newItem.value" required/> 
<span class="error" ng-show="newItem.value.$error.required">Required!</span> 
<button ng-click="addItem()">Add Item</button> 

(沒有看到這裏的任何驗證消息)

在它的上面,我想ADDITEM檢查驗證的狀態以及

$scope.addItem = function(){ 
    if(<do something to check validation>) 
    { 
     <do some other thing> 
    } 

任何幫助將不勝感激!

感謝, 安德魯

回答

1

我的理解是,要避免使用form.xyz。$錯誤屬性錯誤檢查。 我不知道如何使用指令來做到這一點,但我知道如何使用控制器來做到這一點。 在這種情況下,您可以在模型上使用$ scope。$ watch函數。

這將是這樣的: -

1)在你的控制器,

$scope.$watch('newItem.key',function(){ 
    if(<condition to validate> ==true) 
    { 
     $scope.selectError ="errorMessage"; 
    } 
}); 

2)在HTML

<select id="{{$id}}key" ng-model="newItem.key" 
    ng-options="key as key.label for key in tableKeys" required> 
</select> 
<span class="error" ng-show="selectError">{{selectError}}</span> 

注:這僅適用於選擇元素。您可以將文本輸入綁定到模型,併爲其執行相同的操作。

$ scope。$ watch函數將注意指定模型的任何更改,並在發生任何更改時執行隨附的代碼。

+0

是的,我希望它會更直接地參與內置的表單驗證,但是擔心這將是答案。我會測試一下,如果你有什麼作品,你會得到積分。 – Boomtown

+0

雖然,文檔確實說明了您如何檢查錯誤屬性(基於表單)。爲什麼你認爲用戶不會在控制器或指令中使用表單的「名稱」屬性? – Boomtown

+0

您絕對可以在控制器中使用該表單的名稱。再一次,不知道指令。我以爲你想在不使用表單名稱的情況下進行錯誤檢查。如果我誤解了,我很抱歉。 –