AngularJS отображает элемент, если он находится в массиве

#javascript #php #arrays #angularjs #checkbox

#javascript #php #массивы #angularjs #флажок

Вопрос:

Я пытаюсь повторно заполнить группу флажков на основе ранее выбранных пользовательских разрешений.

Я создал массив идентификаторов разрешений и хочу сравнить входной элемент с массивом идентификаторов и отобразить флажок как установленный, если они совпадают, в противном случае отобразить флажок без флажка.

Вот как я создал $scope.assigned массив:

 $scope.user.$promise.then(function(result) {
    $scope.user = resu<
    $scope.assigned = [];
    angular.forEach($scope.user.permissions, function(value, key) {
        this.push(value.id);
    }, $scope.assigned);

console.log($scope.assigned);
  

Когда $scope.assigned он регистрируется в консоли, у меня остается массив, например, ["2", "3", "4"] представляющий ранее выбранные идентификаторы разрешений. Теперь я хочу сравнить их с permissions.id

представление:

 <h4>Manage Permissions</h4>
<div class="form-group" ng-repeat="permission in permissions">
    <label>
        <input ng-if="permission.id == assigned" type="checkbox" ng-checked="true" checklist-model="user.permissions" checklist-value="permission.id" class="checkbox-inline">
        {{ permission.display_name }}
    </label>
</div>
<button class="btn btn-success" type="submit">Save</button>
  

Я думал, что мог бы сделать что-то вроде ng-if="permission.id == assigned" , но это не работает. Мне нужен способ проверить, есть ли permission.id соответствует всему, что находится внутри назначенного.

Ранее я делал это в PHP следующим образом: if(in_array($permission['id'], $assigned))

Как я могу выполнить это в AngularJS? Спасибо за любой совет.

Ответ №1:

Используйте indexOf :

 ng-if="assigned.indexOf(permission.id) != -1"
  

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

1. Потрясающе, спасибо @merlin! Не знал об indexOf(), я все еще новичок в JavaScript и AngularJS. Спасибо за помощь!

2. @MitchGlenn Также взгляните на таблицу совместимости Array.prototype.indexOf , если вы хотите поддерживать старые браузеры.