AngularJS - 使用ng-model动态名称访问输入数组

时间:2016-11-08 19:23:38

标签: javascript angularjs angular-ngmodel

我有3行,每行有13个输入字段。 所有遵循规则的都有类似的模型:

第一行: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]进行访问,但它说“字段”未定义。

以下是我试图从AngularJS控制器访问它的方法:

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

我是AngularJS的新人,感谢您的耐心等待。

3 个答案:

答案 0 :(得分:0)

访问该方式应该没有问题。也许你在其他地方有一些错误。

&#13;
&#13;
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'}
    ]
  ]
}
&#13;
<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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

好吧,我发现问题是有人需要知道的。 基本上,为了使输入数组在$scope内,需要使用ng-repeat进行循环。因此,即使您将ng-model指令提供给输入,它也不会知道它,因为它没有被AngularJS处理。

结论:您不能以这种方式读取输入数组。我通过提供动态ID(例如field-1-6然后使用:

)来解决这个问题
angular.element("#myApp").find("#field-" + firstIndex + "-" + secondIndex );

在我看来,只需重做代码并使其由角度生成就好得多。在我的情况下,它无法完成,因为客户端并不希望升级该代码。所以,如果你在我的情况下,这是一个很好的解决方法。

答案 2 :(得分:0)

不幸的是,您更新了问题的代码未显示

  1. 如何初始化$ scope.field
  2. 你如何在ng-repeat中使用它
  3. 根据前两点,

    <input ng-model='field[1][6]' type='text' />可能意味着不同的事情。

    没有上下文角度会像这样http://jsfiddle.net/3tsw98yf/

    读取它

    那是你在找什么?