AngularJS -访问一个带有ng-model动态名称的输入数组

AngularJS - Accessing to an input array with ng-model dynamic name

本文关键字:动态 ng-model 数组 输入 访问 一个 AngularJS      更新时间:2023-09-26

我有3行,每行有13个输入字段。所有的规则都有一个ng模型,如:

第一行:field[1][{1-13}]第二行:field[2][{1-13}]第三行:field[3][{1-13}]

因此,如果我想访问第一行和字段#6,我像$scope.field[1][6]那样做。问题是我不能像这样访问字段。

这是输入的HTML:

<input ng-model='field[1][6]' type='text' />

我试图通过使用:$scope.field[1][6]访问,但它说"field"是未定义的。

这是我如何试图从我的AngularJS控制器访问它:

angular.module("myModule")
    .controller("myModuleController", ["$scope","$http", function($scope,$http) {
        console.log($scope.field[1][2]);
}]);
  • 这些字段是在DOM加载时创建的,由于一些更深层次的因素,它们不能用ng-repeat生成。

我是AngularJS的新手,谢谢你的耐心。

这样访问应该没有问题。可能您在其他地方有错误。

angular.module('test', [])
.controller('Test', Test);
function Test($scope) {
  $scope.fields = [
    [
      {name: '1-1'},
      {name: '1-2'},
      {name: '1-3'}
    ],
    [
      {name: '2-1'},
      {name: '2-2'}
    ],
    [
      {name: '3-1'}
    ]
  ]
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<div ng-app='test' ng-controller='Test'>
  <div ng-repeat='(i, lv1) in fields'>
    <div ng-repeat='(j, lv2) in lv1'>
      <input type='text' ng-model='lv2.name'>
      <input type='text' ng-model='fields[i][j].name'>
    </div>
  </div>
  
  <div>
    <input type='text' ng-model='fields[1][1].name'>
  </div>
</div>

好了,我找到了问题所在,以防有人需要知道。基本上,为了使输入数组在$scope中,它需要与ng-repeat循环。所以,即使你把ng-model指令给了输入,它也不会知道它,因为它没有被AngularJS处理过。

结论:不能这样读取输入数组。我通过给出一个动态ID来解决这个问题,比如field-1-6,然后使用:

angular.element("#myApp").find("#field-" + firstIndex + "-" + secondIndex );

在我看来,重做代码并让它由angular生成要好得多。在我的例子中,这是不可能的,因为客户端不想升级这段代码。所以,如果你是在我的情况下,这是一个很好的变通办法。

你已经更新了你的问题不幸的代码不显示

  1. 如何初始化$scope。字段
  2. 如何使用它在ng-repeat

<input ng-model='field[1][6]' type='text' />可以根据前两点表示不同的含义。

如果没有上下文,angular会这样读http://jsfiddle.net/3tsw98yf/

这是你想要的吗?