2014-01-08 49 views
1

我正在构建一个连接到服务器端输入验证的REST服务的Angular应用程序。AngularJS服务器表单验证/ Javascript:解析JavaScript变量“路径”

例如如果我发送对象到服务器的JSON,如:

entry: { id: 5, name: "Test", locales: ["de","en"] } 

我会得到这样的回答:

{ id: 5, name: "Test", countries: ["de","en"], 
    __errors__: [ 
     { field: "entry.name", message: "Test already in use" }, 
     { field: "entry.countries[1]", message: "'en' is not a country" } 
    ] 
} 

(省略了更好的阅读引号)

field值是javascriptish表示法中导致问题的原始值的“路径”。

我在选择什么符号方面有些自由,但我喜欢这一点,因为它易于阅读并与系统其余部分集成。但我愿意提供更好的建议。

问题:

现在我要角表现出哪场失败,这消息。这样做的最好方法是什么?

我试过类似$scope.EditForm.$setValidity(field, message)的东西,但它没有效果。

(注:我使用的角度与引导)

回答

1

为什么不返回一个错误的对象,您在您的标记绑定?

这里有一个小提琴:http://jsfiddle.net/edeustace/UMRU9/2/

这里有一个片段:

<div ng-app="App" ng-controller="Ctrl"> 
    <input id="name" type="text" ng-model="name"></input> 
    <span ng-show="errors.name" style="color: red">{{errors.name}}</span> 
    <br/> 
    <input id="lastName" type="text" ng-model="lastName"></input> 
    <span ng-show="errors.lastName" style="color: red">{{errors.lastName}}</span> 
    <div ng-repeat="c in countries"> 
    <input ng-model="c" type="text"></input> 
    <span style="color: red" ng-show="errors.countries[$index]">{{errors.countries[$index]}} </span> 
    </div> 
    <button ng-click="submit()">Submit</button> 
</div> 

JS:

var app = angular.module('App', []); 

app.controller('Ctrl', function($scope){ 

    $scope.name = "Ed"; 
    $scope.lastName = "Eustace"; 
    $scope.countries = ["Ireland", "England"]; 
    $scope.submit = function(){ 
     $scope.errors = {name: "Name in use", lastName: "", countries: ["Ireland is not available"] }; 
    } 
}); 

这样,你只需要接线了UI和更新将发生免费由于数据绑定。

+0

嗨编。感谢您的回复和努力。我并不确定,因为我很难理解角度的验证过程,但似乎你的方法正在解决它。据我了解(我可能是完全错误的)'$错误','$脏'等东西是做“表格控制/验证的东西”,并“集成”以某种方式“(我再次有一个在这里困难时期)与什么引导程序(例如显示泡沫帮助)。 – Scheintod

+0

我仍然处于一种状态,在这种状态下,我经常删除一半的代码,因为我发现Angular已经完成了我刚写的内容...以某种角度的方式。所以目前我有一种感觉,那就是有什么“棱角分明”的东西潜伏在那里使用。 – Scheintod

+0

但是,我仍然喜欢这种方法,就是它在HTML端集成的简单性。也许除了数组的东西,它强制N个空元素之前的一个指示错误,如果列表变长。 – Scheintod