我使用ng-repeat生成表格(例如):
<table ng-repeat="item in items">
<tr>
<td>
<input ng-blur="changeMyItem($event)">{{item.Name}}</input>
<td>
<td>
<div>{{itemError}}</div>
</td>
</tr>
</table>
我正在进行可能会失败的调用,并且在发生错误时渲染页面后,我很难弄清楚如何将上面的itemError设置为错误消息。
从我的changeMyItem方法(由ng-blur触发)我尝试了表达式语法,它只是变成一个空div。我也试过调用$ scope。$申请我的成功回调,它说$ digest已经在进行中并且有错误。
如果不使用自定义指令,如何使用相关错误更新上面的itemError?
答案 0 :(得分:0)
嗯,我认为最简单的方法是ng-init
每个重复表的新对象,并将其传递给changeMyItem
函数:
<table ng-repeat="item in items" ng-init="itemError = { message : '' }" >
<tr>
<td>
<input ng-blur="changeMyItem($event, itemError)">{{item.Name}}</input>
</td>
<td>
<div>{{itemError.message}}</div>
</td>
</tr>
</table>
使用具有属性的对象,以便通过引用该函数来传递它。
然后你可以这样做:
$scope.changeMyItem = function(event, error) {
//whatever
error.message = "It didn't work!";
}
答案 1 :(得分:0)
你真的应该使用服务:
<table ng-repeat="item in myForm.items track by $index">
<tr>
<td>
<label>{{item.Title}}</label>
<input ng-blur="myForm.changeMyItem($event, $index)" ng-model="item.Value">
<td>
<td>
<div>{{item.Error}}</div>
</td>
</tr>
</table>
然后
app.factory('myForm', function(){
var myform = {};
myForm.items = [{ ... }];
myForm.changeMyItem = function(event, index){
};
myForm.submit = function(){
};
myForm.setErrors = function(){
};
...
return myForm;
});
答案 2 :(得分:0)
麦克, 如果您尝试为每个输入设置错误消息,则应执行此操作。
<table ng-repeat="item in items">
<tr>
<td>
<input ng-blur="changeMyItem(item, $event)" ng-model="item.Name">
<td>
<td>
<div>{{item.ErrorMessage}}</div>
</td>
</tr>
</table>
在你的控制器中,你可以有类似的东西:
$scope.changeMyItem = function(item, $event) {
if(!item.Name) {
item.ErrorMessage = "This has error";
}
}