AngularJS服务器表单验证/Javascript:解析Javascript变量;路径“;

AngularJS服务器表单验证/Javascript:解析Javascript变量;路径“;,javascript,json,validation,angularjs,Javascript,Json,Validation,Angularjs,我正在构建一个连接到REST服务的Angular应用程序,该服务进行服务器端输入验证 e、 g.如果我向服务器发送一个类似JSON的对象: entry: { id: 5, name: "Test", locales: ["de","en"] } 我会得到如下回应: { id: 5, name: "Test", countries: ["de","en"], __errors__: [ { field: "entry.name", message: "Test alrea

我正在构建一个连接到REST服务的Angular应用程序,该服务进行服务器端输入验证

e、 g.如果我向服务器发送一个类似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" }
    ]
}
(为便于阅读,省略引号)

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

我可以自由选择什么符号,但我喜欢这个符号,因为它易于阅读并与系统的其他部分集成。但我愿意接受更好的建议

问题是:

现在,我想显示哪个字段与哪个消息一起失败。最好的方法是什么

我尝试了
$scope.EditForm.$setValidity(字段,消息)
之类的方法,但没有效果


(注意:我将Angular与引导一起使用)

为什么不在标记中返回绑定到的错误对象

这是一把小提琴:

下面是一个片段:

<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>

这样,您只需连接ui,由于数据绑定,更新将免费进行。

Hi ed。感谢您的回复和努力。我不是很确定,因为我很难理解angular的验证程序,但似乎你的方法正在解决这个问题。据我所知(我可能完全错了),
$error
$dirty
等等。这些东西是用来做“表单控制/有效性”的东西,并且以某种方式与bootstrap的功能(例如,显示bubble帮助)集成在一起(我在这里也遇到了困难).我仍然处于一种状态,我发现自己经常删除一半的代码,因为我发现Angular已经做了我刚刚写的事情。。。以某种角度。因此,目前我有一种感觉,有一些“狭隘”的东西潜藏在那里,可以使用。但是,再一次:我喜欢这种方法的是它在HTML方面的易集成性。也许除了数组元素之外,数组元素强制N个空元素,如果列表变长,则在指示错误的元素之前。啊,好的-我不知道ng有这个-将查看一下,看看是否可以从服务器结果中分配$errors对象。
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"] };
    }
});