Подтвердить что ты не робот

Как отключить кнопку в AngularJS, если в массиве есть элементы?

У меня есть объект: model.data

Как отключить кнопку, если у этого объекта есть массив вопросов, и если этот массив имеет более одного элемента?

Я попытался:

data-ng-disabled="model.questions.length > 0"

Но это, похоже, не работает вообще.

4b9b3361

Ответ 1

EDIT: изменение ответа в ответ на сообщения и комментарии

Как насчет:

data-ng-disabled="checkQuestions()"

И затем в вашем контроллере:

$scope.checkQuestions = function() {
 if (model.questions.length > 1) { // your question said "more than one element"
   return true;
  }
  else {
   return false;
  }
};

На самом деле это сводится к тому, что для выполнения этой задачи существует несколько способов; выражение, функция, связанная переменная (о чем свидетельствуют различные ответы здесь). Если ни один из них не работает, проблема может быть в вашей модели вместо этого. Если бы вы могли прояснить некоторые несоответствия (см. Мои комментарии о запросе структуры вашей модели... также, вы заинтересованы в ее отключении, если что-либо в массиве, или только в том случае, если в массиве есть несколько вещей?), это поможет понять это.

Здесь сценарий, показывающий все три подхода; вы увидите, что все они работают. Сравните ваш контроллер со скрипкой и посмотрите, сойдет ли он.

http://jsfiddle.net/jlmcdonald/P8qjR/3/

Ответ 2

Вы определенно можете использовать выражение вместо функции. Но вы можете проверить, есть ли массив undefined.

<button ng-disabled="model.questions != undefined && model.questions.length > 0"></button>

Ответ 3

Я не мог получить ответ @zsong на работу, и я не хотел создавать функцию, чтобы вернуть длину массива, поэтому я получил ее работу, создав другую переменную области видимости, которая вернула array.length.

$scope.modelQuestionsLength = $scope.model.questions.length;

Тогда я мог бы сделать

<button ng-disabled="modelQuestionsLength > 0"></button>

Ответ 4

Создайте модель, а затем установите для нее значение по умолчанию значение false. Затем измените его значение на true, если длина массива не пуста. После этого привязка модели к атрибуту ng-disabled кнопки.

Ответ 5

Я не мог получить способ undefined, поэтому, если у кого-то еще есть проблемы, это сработало для меня:

<input ng-disabled="fieldsPermittedForEdit.indexOf('postDate') < 0">

В этом примере я отключу это поле, если postDate не существует в массиве fieldsPermittedForEdit.