正在学习 angular,在使用 ng-options 时遇到问题

learning angular, having issues with ng-options

我正在自学 angular 但卡住了。

我有一个简单的html。第

    <!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title>shows tutorial</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
    <script src="app.js"></script>
    <script src="main.ctrl.js"></script>
</head>

<body ng-app="app" ng-controller="MainController as main">

<style>
.show_container {margin-bottom: 40px;}
.shows_list{padding: 20px 0;}
</style>

<div class="container">

    <h1>{{main.title}}</h1>

    <div class="row">
        <div class="input-group">
            <span class="input-group-addon">
                <span class="glyphicon glyphicon-search"></span>
            </span>
            <input type="text" class="form-control" ng-model="main.searchInput">
        </div>
    </div>

    <div class="row show_container">
        <div class="col-lg-12"><h3>A list of TV shows</h3></div>
        <div class="col-lg-12">
            <div class="col-lg-6 shows_list" ng-repeat="show in main.shows | filter:main.searchInput">
                <h4>{{show.title}} </h4> 
                <span>{{show.year}}</span>
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col-lg-12">
            <select class="form-control pull-right" ng-model="main.shows" ng-options="genre as show.genre for show in main.shows" ></select>
        </div>
    </div>

</div>

</body>

</html>

我的app.js文件

angular.module('app', []);

我有一个控制器设置了一些数据

angular.module('app')
.controller("MainController", function(){

    var vm = this;

    vm.title = 'AngularJS Tutorial Example';
    vm.searchInput = '';

    vm.shows = [
        {
            title: 'Game of Thrones',
            year: 2011,
            genre: 'Drama',
            favorite: true
        },
        {
            title: 'Walking Dead',
            year: 2010,
            genre: 'Suspense',
            favorite: true
        },
        {
            title: 'Firefly',
            year: 2002,
            genre: 'Drama',
            favorite: true
        },
        {
            title: 'Banshee',
            year: 2013,
            genre: 'Suspense',
            favorite: true
        },
        {
            title: 'Greys Anatomy',
            year: 2005,
            genre: 'Drama',
            favorite: false
        }
    ];
});

这就是我卡住的地方。 1.) 在我的 ng-options 中,当我进行选择时,值会消失。 2.) 我不知道如何分组 "genres" 3.) 虽然搜索输入会优化搜索,但我更希望从 ng-options 选择中获得值 return..

我完全被困住了,一直在寻找 google 寻求帮助。虽然我发现使用 $scope 有很多问题,但我想尝试坚持使用它。

ng-model 应该是您存储选择的变量:

    vm.selectedValue='';

在控制器和模板中:

    <select class="form-control pull-right" ng-model="main.selectedValue" ng-options="show.title group by show.genre for show in main.shows" ></select>

创建 selection 时值会消失,因为您的 ng-model 必须分配给其他变量,而不是整个显示数组。

这是一个可以使用你的例子的 plunker:http://plnkr.co/edit/ypU7xqfoeHHspHLvDiz7?p=preview

我创建了一个 searchInput,其中 ng-model="main.searchInput.genre" 用于您的 select 标签。

这是一个根据您的节目创建流派列表的功能:

      vm.genres = [];

      vm.shows.forEach(function(element){
        if (vm.genres.indexOf(element.genre) == -1) {
          vm.genres.push(element.genre);
        }
      });

如果您想更多地了解 ng-options 和 select,这里有 3 个不同用途的示例:http://plnkr.co/edit/Xc8Qrcr0AN4I2U0chbye?p=info