AngularJS - 使用 ng-model 动态名称访问输入数组
AngularJS - Accessing to an input array with ng-model dynamic name
我有 3 行,每行有 13 个输入字段。
所有遵循的规则都有一个 ng-model,如:
第一行: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 生成要好得多。就我而言,这是无法完成的,因为客户不希望升级那段代码。因此,如果您遇到我的情况,这是一个很好的解决方法。
;)
不幸的是,您用来更新问题的代码没有显示
- 您如何初始化 $scope.field
- 您如何在 ng-repeat 中使用它
<input ng-model='field[1][6]' type='text' />
根据前两点可能有不同的含义。
没有上下文angular会这样读http://jsfiddle.net/3tsw98yf/
这就是你要找的吗?
我有 3 行,每行有 13 个输入字段。 所有遵循的规则都有一个 ng-model,如:
第一行: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 生成要好得多。就我而言,这是无法完成的,因为客户不希望升级那段代码。因此,如果您遇到我的情况,这是一个很好的解决方法。
;)
不幸的是,您用来更新问题的代码没有显示
- 您如何初始化 $scope.field
- 您如何在 ng-repeat 中使用它
<input ng-model='field[1][6]' type='text' />
根据前两点可能有不同的含义。
没有上下文angular会这样读http://jsfiddle.net/3tsw98yf/
这就是你要找的吗?