AngularJS下 select动态选项

如何实现点击下拉框动态获取下拉列表?
用chrome实现时,第一次点击不能立即出现,必须再点一次才能获取到全部列表,如下图:
图片描述

正常的显示效果:
图片描述

代码从apiCategory获取已有的列表信息;
从currentCategory中获取当前的Category信息,并使其显示在下拉框;
二者均为当前目录下的json格式文件;
apiCategory格式:

{
  "code":"0",
  "data":[
    {
      "category_name":"north",
      "category_id":"1"
    },
    {
      "category_name":"south",
      "category_id":"2"
    },
    {
      "category_name":"run",
      "category_id":"3"
    }
  ]
}
<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <meta charset="UTF-8">
  <title>select demo</title>
</head>
<body ng-controller="ctrl">
<label for="Category">Category</label>
<select  style="width: 100px" name="Category" ng-model="currentCategory" ng-click="getApiCategory()">
  <option ng-repeat="cat in apiCategory" value={{cat.category_id}}>{{cat.category_name}}</option>
</select>
{{currentCategory}}

<script src="../lib/angular.js"></script>
<script>
  var myapp=angular.module("myApp",[]);
  myapp.controller("ctrl",["$scope","$http",function ($scope,$http) {

    $scope.getApiCategory=function () {
      $http.get("currentCategory").then(function (response) {
        if(response.data.code=="0")
          $scope.currentCategory=response.data.data.category_id;
        else
          alert("Get current category failed!");
      })
      //若存在,不重复获取
      if($scope.apiCategory)
        return;
      $http.get("apiCategory").then(function (response) {
        if (response.data.code == "0")
        {
          $scope.apiCategory=[];
          var  len=response.data.data.length;
          for(var i=0;i<len;i++)
            $scope.apiCategory.push(response.data.data[i]);
          console.log($scope.apiCategory);
        }
        else
          alert("Get apiCategory failed!");
      })
  }
  }])
</script>
</body>
</html>
阅读 7k
4 个回答
<select  style="width: 100px" name="Category" ng-model="currentCategory" ng-click="getApiCategory()">
  <option ng-repeat="cat in apiCategory" value={{cat.category_id}}>{{cat.category_name}}</option>
</select>

看到这样写有点不爽,怎么不使用ngOptions

<select ng-options="item.category_id as item.category_name for item in apiCategory" ng-model="currentCategory"></select>

然后获取下拉列表的信息你可以一开始就加载呀,不要click之后再加载

这个问题我之前也遇到过,我说说我的想法吧。

你给你的 下拉列表 来一个最小高度,因为你看你的其实是加载好了。但是因为你的高度不够出现了滚动条。

我之前不是用angular出现的问题,我是用原生。解决办法也好。就是一上来的时候不为空。里面有两条以上的数据。就不会出现不显示的问题

楼主,解决了吗 问题

一楼应该是对的,页面加载的时候加个loading,数据都加载完了再让客户操作。你这个问题应该是数据没加载的时候就点击了select。另外写if判断的时候写大括号不是个坏习惯,这个东西很重要的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题