ng-repeat和访问项元素

时间:2014-07-14 17:32:54

标签: angularjs ng-repeat

我使用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?

3 个答案:

答案 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";
    }
}