【问题标题】:AngularJS - nested ng-repeat with select/option, get/set the selected valueAngularJS - 使用选择/选项嵌套 ng-repeat,获取/设置所选值
【发布时间】:2016-08-20 17:00:29
【问题描述】:

我正在尝试设置两个 ng-repeat 循环,其中一个嵌套循环是一个选择/选项下拉菜单。我检查了其他类似的帖子,但仍然不确定如何在 HTML 中定义 ng-model 以获取/设置选择框中的默认值/选项。

    <table>
      <tr ng-repeat="student in studentList">
        <td>{{student.name}}</td>
        <td>
          <select ng-model="courseSelected">
            <option ng-repeat="course in courseList" value="{{course.id}}">{{course.name}}</option>
          </select>
        </td>
      </tr>
   </table>

studentList 和 courseList 都来自数据库表,student 表/对象有一个 courseId 列/引用。换句话说,默认选择的课程和更改的课程选项(如果发生这种情况)将具有它们背后的逻辑:student.courseId = course.id

感谢任何帮助。

【问题讨论】:

    标签: javascript angularjs drop-down-menu angularjs-ng-repeat


    【解决方案1】:

    var editer = angular.module('app', []);
    
    function myCtrl($scope) {
    
      $scope.studentList = [{
        id: 1,
        name: 'Jack'
      }, {
        id: 2,
        name: 'Terry'
      }, {
        id: 3,
        name: 'Rosa'
      }, {
        id: 4,
        name: 'Holt'
      }];
      $scope.courseList = [{
        id: 1,
        name: 'Course1'
      }, {
        id: 2,
        name: 'Course2'
      }];
    
    }
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
     
    <div ng-app="app" ng-controller="myCtrl" class="container">
    <table>
          <tr ng-repeat="student in studentList">
            <td>{{student.name}}</td>
            <td>
              <select ng-model="student.courseSelected" ng-options="course as course.name for course in courseList">
        </select>
             
            </td>
            <td>
              {{student.courseSelected.name}}
              </td>
          </tr>
       </table>
      <label class="item item-input">
        <span class="input-label">Select date</span>
        
      </label>
    
      <pre>{{dateOption}}</pre>
    </div>

    【讨论】:

      【解决方案2】:

      我认为你应该在标签中使用 ng-options,例如:

      <select ng-model="courseSelected" ng-options= "course.id for course in courseList">
      

      也许您应该阅读这些文档以获得更多解释:

      https://docs.angularjs.org/api/ng/directive/ngOptions

      https://docs.angularjs.org/api/ng/directive/select

      【讨论】:

        【解决方案3】:
        <select ng-model="student.courseId" ng-options="course.name as course.id for course in courseList">
        

        这应该可以为您提供所需的内容。我假设一门课程具有name 属性。但是您可以在 ng-options 指令中使用您喜欢的任何属性为课程命名。更多文档可以在here找到。

        【讨论】:

        • 嗯...我可能遗漏了一些东西,但这似乎并没有在页面加载时获取默认值/名称。选择框保持空白,当然当我点击下拉课程列表时,我可以看到课程。
        • 您还必须在角度代码中明确设置默认值。它无法从您的数据库模型中读取默认值。你的意思是数据库默认值?还是加载时 student.courseId 的初始值?
        • 如果 student.courseId 是null,undefined,或者是空字符串,angular不知道如何初始化ng-model,所以会在顶部生成一个空白选项选择。这是 angularjs 中的一个已知错误
        • 使用静态 JSON 数据似乎一切正常,但是当我获得两组数据,studentList 和 courseList 时,从 DB 调用中,第一个选项显示?作为价值。与此处相同的问题stackoverflow.com/questions/12654631/…
        • 正确,就像我说的,这与角度如何确定相关元素的ngModel 有关。不过,这超出了这个问题的范围。如果我回答了你最初的问题,你能接受我的回答吗?如果没有,我可以提供更多帮助。谢谢
        猜你喜欢
        • 2014-02-16
        • 2016-12-11
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 2019-02-18
        • 2018-11-02
        • 1970-01-01
        • 2015-05-07
        相关资源
        最近更新 更多