Ng-если не будет отображаться ng-повтор на экране

#angularjs #angularjs-scope #angularjs-ng-repeat

#angularjs #angularjs-область #angularjs-ng-повтор

Вопрос:

Я беру числовой ввод от пользователя. Я спрашиваю, сколько людей вы хотите? Предположим, что пользователь ввел 3.

У каждого «people» есть имя и фамилия.

Как только пользователь вводит количество «людей», которое он хочет, и нажимает «Отправить», я должен создать поля «firsrname» и «lastname» для стольких людей, сколько ввел пользователь (3 в этом примере).

Это код, который я написал. Просмотрите его и скажите мне, чего мне не хватает?

HTML:

 <div>
    <label for="people">Number of people</label>
    <input type="number" name="people" ng-model="vm.people">
</div>

<input type="submit" name="submitPeople" ng-click="vm.fillPeople()">

<div ng-if="vm.noOfPeopleArray.length != 0" ng-repeat="peopleArray in vm.noOfPeopleArray">
    <input type="text" name="test" ng-model="peopleArray.firstname">
    <input type="text" name="test" ng-model="peopleArray.lastname">
</div>
  

Вот как выглядит контроллер:

 vm.noOfPeopleArray = [];

vm.fillPeople = fillPeople;

function fillPeople() {
  fillPeopleArray();
  console.log("This is how big your desired array is.");
  console.log(vm.noOfPeopleArray);
  console.log("End result")
}




function fillPeopleArray() {
  for(var i=0; i<vm.people; i  ){
  vm.noOfPeopleArray.push({
  "firstname":'',
  "lastname": ''
  })
}
}
  

Консоль регистрирует сообщение и показывает мне, что мой массив был заполнен. Но что бы ни случилось, он не отображает часть после кнопки отправки. И я попробовал несколько вариантов.

Чего мне здесь не хватает? Пожалуйста, сообщите мне, какую любительскую ошибку я совершаю.

TIA

Комментарии:

1. У вас есть дополнительное закрытие </div>

2. Возможно ли увидеть весь код целиком? Это выглядит как фрагмент вашего контроллера / страницы

3. Почему вы используете отправку вместо кнопки? Зачем вам вообще нужно ng-if ? И показывает ли он какие-либо входные данные после нажатия кнопки отправки?

4. Извините @Weedoze, это была ошибка с моей стороны при копировании части кода и изменении имен. Но будьте уверены, что даже когда я устанавливаю divs на место, код все равно не отображается.

5. Хорошо, @taguenizy, я бы поставил кнопку вместо отправки и избавился от ng-If и сообщил о своих изменениях. Кстати, он не показывает никаких <ввод> после того, как я нажимаю отправить. Вот где это меня смущает. Я просто был очень осторожен при написании кода, вот и все

Ответ №1:

Является ли vm = $scope.vm ? Если нет, виртуальная машина является частной, и DOM не может получить к ней доступ. Вы должны присоединить виртуальную машину к области видимости, например $scope.vm = vm;

Комментарии:

1. Я сделал var vm = this; в своем коде. Это не работает?

Ответ №2:

Если я правильно воспроизвел ваш контроллер из опубликованного вами фрагмента, вам необходимо настроить свой контроллер на использование $scope, как в примере ниже:

 function fillPeople() {

  fillPeopleArray();
  console.log("This is how big your desired array is.");
  console.log($scope.vm.noOfPeopleArray);
  console.log("End result")
}




function fillPeopleArray() {
  for(var i=0; i<$scope.vm.people; i  ){
  $scope.vm.noOfPeopleArray.push({
  "firstname":'',
  "lastname": ''
  })
}
  

откройте jsfiddle ниже

http://jsfiddle.net/3vzLbro8/?utm_source=websiteamp;utm_medium=embedamp;utm_campaign=3vzLbro8

Комментарии:

1. Если он сделал var vm = this в контроллере, он этого не делает

2. OP использует controllerAs шаблон, ваш ответ совершенно не имеет значения

3. @taguenizy «Если» он сделал var. Я не знаю остальной части кода

4. Да, я использую controllerAs шаблон в своем конфигурационном файле. И, честно говоря, я еще больше запутался, пытаясь понять ваш ответ. Я все еще не понимаю, чего мне не хватает.

5. @Tonino вы также не знаете, что он использует $scope