在没有表单的情况下访问角度模型验证

时间:2014-01-27 23:35:52

标签: angularjs validation

我希望在我正在构建的Angular Directive中使用一些验证功能。但是,该指令可能在表格内,也可能不在表格内。有没有办法访问模型的验证状态而不尝试访问表单的状态? 我的模板符合......

<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 个答案:

答案 0 :(得分:1)

我的理解是你要避免使用form.xyz。$ error属性进行错误检查。 我不知道如何使用指令,但我知道如何使用控制器。 在这种情况下,您可以在模型上使用$ 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>

注意:这仅适用于select元素。您可以将文本输入绑定到模型,也可以为它执行相同的操作。

$ scope。$ watch函数将注意对指定模型的任何更改,并在发生任何更改时执行附带的代码。