Скрытие опции в ng-опциях

Я новичок в Angular и пробую ng-опции. В моем контроллере у меня есть:

$scope.permissionLevels = [
    { value: "ROLE_READ", text: "Read Only" },
    { value: "ROLE_WRITE", text: "Write" }
];

В моем шаблоне у меня есть:

<select ng-options="permissionLevel.text for permissionLevel in permissionLevels"
        ng-model="selectedValue"></select>

В зависимости от вида я хочу скрыть либо чтение, либо запись. Так что в моем контроллере у меня есть другой флаг, который указывает, что это за вид. До того, как я использовал ng-options, у меня был обычный выпадающий список select, и я сделал что-то вроде этого

<select>
    <option>Read Only </option>
    <option ng-show="shouldShowWrite">Write </option>
</select>

Есть ли способ сделать это с помощью ng-options? Благодарю.

Ответ 1

Вы можете использовать фильтр в выражении ngOptions:

<select ng-model="selectedValue"
        ng-options="permissionLevel.text for permissionLevel in 
                    permissionLevels | filter:shouldShow">
</select>

и определите функцию shouldShow() для $ scope в контроллере:

$scope.shouldShow = function (permissionLevel) {
  // put your authorization logic here
  return $scope.permission.canWrite || permissionLevel.value !== 'ROLE_WRITE';
}

Полный пример см.: http://plnkr.co/edit/8FkVktDXKGg3MQQawZCH

Ответ 2

Рассмотрим ngRepeat для этого уровня управления. Я не думаю, что это возможно с помощью ngOptions.

 <select ng-model="selectedValue">
    <option ng-repeat="permissionLevel in permissionLevels" value="{{permissionLevel.text}}" ng-show="shouldShowWrite(permissionLevel)">
      {{permissionLevel.text}}
    </option>
  </select>

Ответ 3

Проверка Plaese ниже кода, это может помочь вам решить проблему!

<select>
<option>Read Only </option>
<option ng-show="selectedValue.value=='ROLE_WRITE'">Write </option>
</select>