Angular 下拉菜单/数据绑定

Angular dropdown/ databinding

我正在尝试弄清楚如何从下拉列表中动态 select 文本字段。我有一个 link 到 stackblitz 草图。理想情况下,我想从数组或 json 文件中提取数据。我尝试以各种方式制作不同的过滤器/键值管道和数据绑定 - 这是我最新的草图

https://stackblitz.com/edit/angular-fst8lm

基本上我想从下拉列表中 select 一项运动,然后根据数组中的信息填充 div(一次只有一项 selected 运动 -我可以吐出所有数据,但似乎无法使 ngFor/ngIf 指令正常工作)-我以前可以使用 Angular1/Angularjs 轻松完成此操作,但我刚刚开始加快当前版本 Angular - 我已经浏览了文档和其他 SO 查询但找不到任何相关的东西 - 奇怪的是它看起来很简单 - 任何建议表示赞赏

这是来自 stackblitz link

的 component.ts 的一部分
import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `

    <div class="example-wrapper">
    <p>Favorite sport:</p>
    <kendo-combobox [data]="listItems" [allowCustom]="allowCustom">
    </kendo-combobox>
    </div>

    <!-- this shows nothing-->
    <div *ngIf="listitems == true" >
    <div *ngFor="let data of sportdata">

    <h1>Sport name: {{data.sportname}}</h1>
    <h2>Sport rules: {{data.sportrules}}</h2>
    <h3>Notable athletes: {{data.sportPersons}}</h3>
    </div>
    </div>

    <!-- this shows something-->
    <div *ngFor="let data of sportdata">

    <h1>Sport name: {{data.sportname}}</h1>
    <h2>Sport rules: {{data.sportrules}}</h2>
    <h3>Notable athletes: {{data.sportPersons}}</h3>
    </div>


  `
})
export class AppComponent {
    public allowCustom: boolean = true;
    public listItems: Array<string> = ["Baseball", "Basketball", "Cricket", "Field Hockey", "Football", "Table Tennis", "Tennis", "Volleyball"];

    public sportdata = [
      {
        position: 1, sportname: 'Basetball', sportrules: 'enter the specific rule set here.', sportPersons: 'Name of sports person/s.'
      },
       {
        position: 2, sportname: 'Basketball', sportrules: 'enter the specific rule set here.', sportPersons: 'Name of sports person/s.'
      },
       {
        position: 3, sportname: 'Cricket', sportrules: 'enter the specific rule set here.', sportPersons: 'Name of sports person/s.'
      },
       {
        position: 4, sportname: 'Field Hockey', sportrules: 'enter the specific rule set here.', sportPersons: 'Name of sports person/s.'
      },
       {
        position: 5, sportname: 'Football', sportrules: 'enter the specific rule set here.', sportPersons: 'Name of sports person/s.'
      },
       {
        position: 6, sportname: 'Table Tennis', sportrules: 'enter the specific rule set here.', sportPersons: 'Name of sports person/s.'
      },
       {
        position: 7, sportname: 'Tennis', sportrules: 'enter the specific rule set here.', sportPersons: 'Name of sports person/s.'
      },
       {
        position: 8, sportname: 'Volleyball', sportrules: 'enter the specific rule set here.', sportPersons: 'Name of sports person/s.'
      },

    ]
}

编辑。我也希望在不使用 kendo UI 的情况下执行此操作,因此这个 stackblitz sketch 有没有办法使用非 kendo 下拉列表来执行此操作? https://stackblitz.com/edit/angular-spor-select-revise-3-sans-kendo

我在这里创建了 Stacblitz:https://stackblitz.com/edit/angular-fst8lm-dakynu

变量 listItems 不是布尔值,因此以下条件不成立。

<!-- this shows nothing-->
<div *ngIf="listItems == true" >

更改为 <div *ngIf="listItems.length>0" >,作品已在 Stackblitz 中更新。

要获得选定的运动,您需要一个变量和组合框的 selectionChange 事件,如下所示:

HTML:

<kendo-combobox (selectionChange)="changeSport($event)" [data]="listItems" [allowCustom]="allowCustom">
</kendo-combobox>

.ts:

changeSport(e){
  console.log(e);

  this.selectedSport = this.sportdata.find(f=>f.sportname == e);
  console.log(this.selectedSport);
}

希望这能让您更好地了解需要做什么。

我修改了你的代码:https://stackblitz.com/edit/angular-fst8lm-6zsqum

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'myfilter',
    pure: false
})
export class MyFilterPipe implements PipeTransform {
    transform(items: any[], filter: any): any {
        if (!items || !filter) {
            return [];
        }
        // filter items array, items which match and return true will be
        // kept, false will be filtered out
        return items.filter(item => item.sportname.indexOf(filter) !== -1);
    }
}

主要介绍一个过滤器和ngModel数据绑定

 <p>Favorite sport:</p>
    <kendo-combobox [data]="listItems" [(ngModel)]="selectedSport" [allowCustom]="allowCustom">
    </kendo-combobox>
    </div>

 <!-- this shows something-->
    <div *ngFor="let data of sportdata | myfilter : selectedSport">

    <h1>Sport name: {{data.sportname}}</h1>
    <h2>Sport rules: {{data.sportrules}}</h2>
    <h3>Notable athletes: {{data.sportPersons}}</h3>
    </div>

和 AppComponent

export class AppComponent {
    public allowCustom: boolean = true;
    selectedSport:any
    public listItems: Array<string> = ["Baseball", "Basketball", "Cricket", "Field Hockey", "Football", "Table Tennis", "Tennis", "Volleyball"];

感谢 Indrkumara 和 user3250 的帮助这是我尝试创建的运动选择器下拉列表的最终版本

https://stackblitz.com/edit/angular-sport-select-revision-6

希望它能帮助来自 Angularjs/v1 并希望跟上 Angular 新版本(目前为 v6)

的任何其他人