2016-11-08 3 views
0

У меня есть 3 строки с 13 полями ввода в каждой строке. Все следует правилу имеет нг-модель, как:AngularJS - Доступ к входному массиву с динамическим именем 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], но он говорит, что «поле» не определено.

Вот как я пытаюсь получить к нему доступ из моего контроллера AngularJS:

angular.module("myModule") 
    .controller("myModuleController", ["$scope","$http", function($scope,$http) { 
     console.log($scope.field[1][2]); 
}]); 
  • Эти поля создаются при DOM нагрузки, и они не могут быть получены с нг-повтора, потому что некоторые более глубокие факторы.

Я новый пользователь AngularJS, спасибо за терпение.

+0

Вы включили свой контроллер –

+0

Конечно, я это сделал. – mkmnstr

ответ

0

Ну, я обнаружил, что проблема заключается в том случае, кто-то должен знать. В принципе, для того, чтобы массив входных сигналов находился внутри $scope, его необходимо зацикливать с помощью ng-repeat. Поэтому, хотя вы даете директиву ng-model на вход, она не будет знать об этом, потому что она не обрабатывается AngularJS.

Вывод: Вы не можете просто прочитать массив входных данных таким образом. Я работал вокруг, давая динамический идентификатор, как field-1-6, а затем с помощью:

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

С моей точки зрения гораздо лучше просто переделать свой код и сделать его генерироваться угловой. В моем случае это невозможно, потому что клиент не хочет, чтобы этот код был обновлен. Итак, это хороший обход, если вы в моей ситуации.

;)

0

Не должно быть проблем с доступом к этому пути. Возможно, у вас есть ошибка в другом месте.

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>

+0

Он работает, когда вы так выразились, но все же я не могу получить доступ к значению поля через контроллер. Я также должен иметь доступ к массиву входов как «$ scope.fields», но нет, все еще не определено. – mkmnstr

+0

@mkmnstr можете ли вы показать свой код о том, как вы пытаетесь получить к ним доступ? – Icycool

+0

@lcycool Я только что обновил свой вопрос с помощью кода, который я использую. С уважением! – mkmnstr

0

кода вы обновили свой вопрос с, к сожалению, не показывают

  1. как вы инициализацию $ scope.field
  2. , как вы используете его в нг-повторить

<input ng-model='field[1][6]' type='text' /> может означать разные вещи в зависимости от первых двух точек.

Без контекста угловой прочтет как этот http://jsfiddle.net/3tsw98yf/

Это то, что вы искали?

+0

Не совсем. Ну, дело в том, что инициализации нет. Их часть кода не может быть изменена и хорошо, я должен был использовать ее только по идентификатору, и установил пользовательское имя. Но спасибо!! – mkmnstr

+0

Это имеет большой смысл. Спасибо за разъяснения. –

Смежные вопросы