Javascript 如何使用AngularJs从ng选项禁用选项?

Javascript 如何使用AngularJs从ng选项禁用选项?,javascript,angularjs,Javascript,Angularjs,当用户打开模式窗口时,我调用rest服务以获取下面代码中的布尔标志,即数据,现在如果该标志为真,我想禁用ng选项中的选项,其中id为RA_ATTST_LANGUAGE。如何基于以下逻辑禁用下拉选项 main.html <select name="adminNotificationTypeCode" class="form-control" ng-model="messageNotificationDTO.adminNotificationTypeCode" required id="adm

当用户打开模式窗口时,我调用rest服务以获取下面代码中的布尔标志,即
数据
,现在如果该标志为真,我想禁用ng选项中的选项,其中id为
RA_ATTST_LANGUAGE
。如何基于以下逻辑禁用下拉选项

main.html

<select name="adminNotificationTypeCode" class="form-control" ng-model="messageNotificationDTO.adminNotificationTypeCode" required id="adminNotificationTypeCode" ng-change="attestationCheck()" ng-options="adminDataSource.id as adminDataSource.text disable when adminDataSource.id == 'RA_ATTST_LANGUAGE' && disableRA_ATTST_LANGUAGE for adminDataSource in adminDataSource">
                            <option value="">Select...</option>
                        </select>
dropdown.json

[{
    "uid": null,
    "index": 0,
    "selected": null,
    "expanded": null,
    "id": "RA_PLTFRM_NOTIF",
    "text": "Platform Maintenance Notification",
    "parentId": null,
    "items": null
}, {
    "uid": null,
    "index": 0,
    "selected": null,
    "expanded": null,
    "id": "RA_ATTST_LANGUAGE",
    "text": "Attestation Language",
    "parentId": null,
    "items": null
}]

*因进一步解释而编辑

尝试将ng options属性更新为此:

 ng-options="adminDataSource.id as adminDataSource.text disable when adminDataSource.id == 'RA_ATTST_LANGUAGE' && disableRA_ATTST_LANGUAGE for adminDataSource in adminDataSource"
您将希望为范围创建一个布尔成员,并根据rest结果将其设置为true或false。。我称之为$scope.disableRA\u ATTST\u语言


*因进一步解释而编辑

尝试将ng options属性更新为此:

 ng-options="adminDataSource.id as adminDataSource.text disable when adminDataSource.id == 'RA_ATTST_LANGUAGE' && disableRA_ATTST_LANGUAGE for adminDataSource in adminDataSource"
您将希望为范围创建一个布尔成员,并根据rest结果将其设置为true或false。。我称之为$scope.disableRA\u ATTST\u语言


假设代码中的其他内容都是正确的,并且您的服务在dropdown.json中为每个实例进行一次调用;如果您只需要知道数据是否存在,而不需要获取实际的数据内容,那么一种快速而肮脏的方法就是将名称存储在数组中,并使用ng disabled指令检查该数组中是否存在id。您的变量名令人困惑,所以我只是对它们进行了一般化,并将select选项的源数组称为“items”

你的js需要这样的东西

 // create an empty array when initializing
    $scope.thatArrayOfIdsThatHaveData = [];
    function getAttestationLanValidation() {
      MessageAdminNotificationFactory.getAttestationLanValidation()
          .then(function(response) {
            var data = response.data;
            console.log('attestation', data);
            if (data) {
              thatArrayOfIdsThatHaveData.push(id);
            }
      });
    };
在模板中,类似以下内容:

<select ng-model="messageNotificationDTO.adminNotificationTypeCode"
        ng-change="attestationCheck()">
  <option value="">Select...</option>
  <option ng-repeat="item in items" 
          value="item.id"
          ng-disabled="thatArrayOfIdsThatHaveData.indexOf(item.id)>=0">{{ item.label }}</option> 
</select>

选择。。。
{{item.label}

假设代码中的其他内容都是正确的,并且您的服务在dropdown.json中对每个实例进行一次调用;如果您只需要知道数据是否存在,而不需要获取实际的数据内容,那么一种快速而肮脏的方法就是将名称存储在数组中,并使用ng disabled指令检查该数组中是否存在id。您的变量名令人困惑,所以我只是对它们进行了一般化,并将select选项的源数组称为“items”

你的js需要这样的东西

 // create an empty array when initializing
    $scope.thatArrayOfIdsThatHaveData = [];
    function getAttestationLanValidation() {
      MessageAdminNotificationFactory.getAttestationLanValidation()
          .then(function(response) {
            var data = response.data;
            console.log('attestation', data);
            if (data) {
              thatArrayOfIdsThatHaveData.push(id);
            }
      });
    };
在模板中,类似以下内容:

<select ng-model="messageNotificationDTO.adminNotificationTypeCode"
        ng-change="attestationCheck()">
  <option value="">Select...</option>
  <option ng-repeat="item in items" 
          value="item.id"
          ng-disabled="thatArrayOfIdsThatHaveData.indexOf(item.id)>=0">{{ item.label }}</option> 
</select>

选择。。。
{{item.label}

它不基于id它基于布尔值
数据
如果rest服务响应为真,那么我们将从下拉列表中禁用
RA_ATTST_LANGUAGE
,但看起来您正在取消整个下拉列表选项我只想禁用下拉列表中的选项获取此错误
错误:[$parse:syntax]语法错误:标记“disable”是表达式[adminDataSource.id='RA_ATTST_LANGUAGE'&&disableRA_ATTST_LANGUAGE]第22列的意外标记,起始于[disable when adminDataSource.id='RA_ATTST_LANGUAGE'&&disableRA_ATTST_LANGUAGE]
更新的问题你们使用的是什么版本的angular?禁用属性是在1.4.something中添加的。我们使用的是angular 1.3,它不基于id,它基于布尔值
数据
如果rest服务响应为true,那么我们将从下拉列表中禁用
RA_ATTST_LANGUAGE
,但看起来您正在取消整个下拉列表选项,我只想禁用作为其一部分的选项DropDownGet此错误
错误:[$parse:syntax]语法错误:标记“disable”是表达式[adminDataSource.text disable when adminDataSource.id=='RA_ATTST_LANGUAGE'&&disableRA_ATTST_LANGUAGE]第22列的意外标记,起始于[disable when adminDataSource.id=='RA_ATTST_LANGUAGE'&&disableRA_ATTST_LANGUAGE]
更新的问题你们使用的是什么版本的angular?禁用属性是在1.4.something中添加的。我们使用的是angular 1.3