Javascript 如何摆脱下拉菜单选项/下拉菜单中的空白-angular JS?

Javascript 如何摆脱下拉菜单选项/下拉菜单中的空白-angular JS?,javascript,html,angularjs,Javascript,Html,Angularjs,我正试图找出如何摆脱显示在下拉菜单中的空白。菜单中不应该有一个“全部”选项。我去掉了这个选项(可能不是正确的选择),有时候刷新时,我可以看到菜单上有一个空白,而其他时候它只会在控制台上给我一个错误。我不知道为什么会有这种变化 最终,我必须放弃所有选项(正确的方法),并删除它留下的空白 这是我的js: define(["app", "lodash", "service/reference", "directives/control/topic-input" ], function (app) {

我正试图找出如何摆脱显示在下拉菜单中的空白。菜单中不应该有一个“全部”选项。我去掉了这个选项(可能不是正确的选择),有时候刷新时,我可以看到菜单上有一个空白,而其他时候它只会在控制台上给我一个错误。我不知道为什么会有这种变化

最终,我必须放弃所有选项(正确的方法),并删除它留下的空白

这是我的js:

define(["app",
"lodash",
"service/reference",
"directives/control/topic-input"
], function (app) {
return app.directive('roleSelect', ['Reference', function (Reference) {
    return {
        restrict: 'A',
        scope: {
            selectedRole: '=',
            selectedTopics: '=?',
            presetRole: '=?',
            topicNameOnly: '@?',
            notUsePresets:'@?'
        },
        link: function ($scope, elem, attr) {
            $scope.talentRoles = [];
            $scope.topicNameOnly = ($scope.topicNameOnly === 'true');
            $scope.notUsePresets = ($scope.notUsePresets === 'true');
            if(!$scope.presetRole) {
                $scope.presetRole = {id: -1, code: "ALL", description: "All"}; 
            } // this is where the 'All' option comes from, so I just got rid of this if statement. Not sure if this is the right thing to do
            if(!$scope.notUsePresets) {
                $scope.talentRoles.push($scope.presetRole);
            }
            Reference.getTalentRoles($scope, function (response) {
                $scope.talentRoles =  response.concat($scope.talentRoles);
                for(var i = 0;i<$scope.talentRoles.length;i++){
                    if($scope.selectedRole && $scope.selectedRole.description == $scope.talentRoles[i].description){
                        $scope.selectedRole = $scope.talentRoles[i];
                    }
                }
            });
            $scope.showTopics = function(){
                return attr.selectedTopics
            }
            $scope.roleChanged = function(role) {
                $scope.selectedTopics = [];
            };
        },
        templateUrl: '/directives/control/role-select.html'
    };
}])
});
define([“应用程序”,
“洛达斯”,
“服务/参考”,
“指令/控件/主题输入”
],功能(应用程序){
返回应用程序指令('roleSelect',['Reference',函数(Reference){
返回{
限制:“A”,
范围:{
selectedRole:“=”,
所选主题:“=?”,
预设角色:“=?”,
仅主题名称:“@?”,
notUsePresets:“@?”
},
链接:函数($scope、elem、attr){
$scope.talentRoles=[];
$scope.topicNameOnly=($scope.topicNameOnly==='true');
$scope.notUsePresets=($scope.notUsePresets=='true');
如果(!$scope.presetRole){
$scope.presetRole={id:-1,代码:“全部”,说明:“全部”};
}//这就是“All”选项的来源,所以我刚刚去掉了if语句。不确定这样做是否正确
如果(!$scope.notUsePresets){
$scope.talentRoles.push($scope.presetRole);
}
Reference.getTalentRoles($scope,function(response){
$scope.talentRoles=response.concat($scope.talentRoles);

对于(var i=0;i我认为如果删除
if
,也应该从$scope初始化中删除
预设角色:'=?'

此外,您还需要检查对
presetRole
的任何其他引用,因为即使删除
if
presetRole
似乎仍会添加到
talentRoles


告诉我它是否有效。

很酷。没问题。您可以单击检查以指定答案是否正确,这样其他人也可以知道修复方法;)
<select class="form-control" required
    id="roleSelector"
    ng-options="talentRole as talentRole.description for talentRole in talentRoles track by talentRole.id" id="talentRole"
    ng-change="roleChanged(role)"
    ng-model="selectedRole">
<option ng-if="true" selected="true" value="" class="select-placeholder"><ln code="directive.role.select.tooltip" args=""></ln></option>
</select>
<div topic-input
 name-only="topicNameOnly"
 class="row-spacing"
 ng-show="showTopics()"
 ng-model="selectedTopics"
 talent-role-id="selectedRole.id"></div>