Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS中预选一个“未知”选项_Javascript_Angularjs_Select_Option - Fatal编程技术网

Javascript 在AngularJS中预选一个“未知”选项

Javascript 在AngularJS中预选一个“未知”选项,javascript,angularjs,select,option,Javascript,Angularjs,Select,Option,我试图在选择下拉列表中预先选择一个选项,如果选项的值是静态的,我知道怎么做。但如果它们是动态变化的呢?在我的例子中,我得到了一个更新很多的相册列表,所以我永远不知道这些选项的价值。我尝试使用ng init选择列表中的第一张专辑,如下所示: <select class="rounded bold" ng-model="selectedAlbum" ng-init="selectedAlbum='album[0].albumName'"> <option ng-repeat

我试图在选择下拉列表中预先选择一个选项,如果选项的值是静态的,我知道怎么做。但如果它们是动态变化的呢?在我的例子中,我得到了一个更新很多的相册列表,所以我永远不知道这些选项的价值。我尝试使用ng init选择列表中的第一张专辑,如下所示:

<select class="rounded bold" ng-model="selectedAlbum" ng-init="selectedAlbum='album[0].albumName'">
    <option ng-repeat="album in albumsList" value="{{album.albumName}}" ng-bind="album.albumName">
</select> 
但是运气不好,从我的搜索中,我真的找不到任何答案。它可能是ng选项,但从我所看到的来看,它不会生成带有绑定的选项。就像我在上面的代码中所做的那样


如何实现这一点?

在控制器中,只需将所选的LBUM模型更改为所需的值即可

$scope.selectedAlbum = albumsList[0].albumName
使用ng options指令生成您的列表,并包含一个空值的选项:

<select class="rounded bold"
        ng-model="selectedAlbum" 
        ng-options="album.albumName for album in albumsList">
  <option value="">-- choose album--</option>
</select>
请参阅

如果唱片列表发生更改,则所选唱片型号可能与任何唱片名称都不匹配。在这种情况下,selectedAlbum将保持其先前的值,angular将向Selected添加一个未知选项。正如我理解你的问题,在这种情况下,你想在新专辑列表中的第一个项目被选中,顺便说一句,我认为这是一个合理的行动。 为了实现这一点,您可以查看albumList并根据new albumList检查selectedAlbum是否有效。如果没有,您可以将其更改为第一项:

$scope.$watch("alubmList", function(newAlbumList){
    if(angular.isArray(newAlbumList) && newAlbumList.length){
        var albumNames = newAlbumList.map(function(album){
            return album.name;
        });
        if(albumNames.indexOf($scope.selectedAlbum)<0)
            scope.selectedAlbum = newAlbumList[0].name;
    }
});
旁注: 您可以使用ng选项重写html:

<select class="rounded bold" ng-options="album.albumName for album in albumsList"></select> 

您只需使用旧的JavaScript即可:

var elementid=document.getElementById("elementid");
var unknown_option=elementid.options[1].value;
elementid.value=unknown_option;
//选项[1]选择第一个选项,如果选择2,则选择第二个选项。。等
但当然,如果你想要最后一个选项,你必须使用长度函数,然后循环或直接反向索引:

使用ng选项,然后设置模型,让你知道。在ng init指令中,您引用了错误的变量。它必须是相册列表[0]instead@tymeJV知道为什么相册列表中相册的:ng options=opt as opt.albumName不起作用吗?@Chrillewoodz,因为您可以交替使用opt和album。您需要选择作为opt.albumName用于选择加入albumList,或者选择作为album.albumName用于选择加入albumList中的album;但是,这与不包括opt as是一样的。。。因为您只是将其设置为完整对象。例如,如果需要,您可以使用opt.id作为opt.albumName作为opt-inalbumList@Tom不幸的是,这两者都不起作用。。它必须是album asalbum.albumName,因为我在原始代码中使用album.albumName作为绑定,对吗?