在Angular 2中选择支持optgroup的下拉组件

阿杰比文

我正在尝试创建一个负责渲染select表单控件的Angular 2组件,但在尝试使其支持时遇到了一些麻烦optgroup

渲染时,我需要能够根据项目是否有子项在optgroupoption元素之间进行切换我正在尝试使用template标签来迭代这些项目,但是似乎不支持select我也尝试在同一元素上添加*ngIf*ngFor,但也不支持。

如何在Angular 2中创建selectwith optgroup


Plunkr demo

form-select.component.js

import { Component, Input, Output, EventEmitter, ElementRef } from '@angular/core';
import { CORE_DIRECTIVES, FORM_DIRECTIVES, NgClass, NgStyle } from '@angular/common';

export class FormSelectOption {
    id: string;
    text: string;
    children: FormSelectOption[];

    constructor(id: string, text: string, children: FormSelectOption[]) {
        this.id = id;
        this.text = text;
        this.children = children;
    }
}

@Component({
    selector: 'form-select',
    template: `
    <select>
        <!-- WORKING -->
        <option *ngFor="let item of items" (click)="select(item.id)">{{item.text}}</option>

        <!-- NOT WORKING -->
        <!--<template *ngFor="let item of items">
            <optgroup *ngIf="item.children" label="{{item.text}}">
                <option *ngFor="let child of item.children" (click)="select(child.id)">{{child.text}}</option>
            </optgroup>
            <option *ngIf="!item.children" (click)="select(item.id)">{{item.text}}</option>
        </template>-->
    </select>
  `
})
export class FormSelectComponent {
    @Input()
    items: FormSelectOption[];

    @Input()
    selectedValue: string[];

    @Output()
    valueChange: EventEmitter<any>;

    constructor(private elementRef: ElementRef) {
        this.valueChange = new EventEmitter<any>();
    }

    select(id) {
        this.valueChange.emit(id);
    }
}

应用程序

//our root app component
import {Component} from '@angular/core'
import {FormSelectComponent, FormSelectOption} from './form-select.component';

@Component({
    selector: 'my-app',
    template: `
        <form-select [items]="things" [selectedValue]="selectedThing"></form-select>
    `,
    directives: [FormSelectComponent],
})

export class App {
    selectedThing = '1';
    things = [
        new FormSelectOption('1', 'Fruit', [
            new FormSelectOption('2', 'Bananas'),
            new FormSelectOption('3', 'Apples'),
            new FormSelectOption('4', 'Oranges')
        ]),
        new FormSelectOption('5', 'Countries', [
            new FormSelectOption('6', 'England'),
            new FormSelectOption('7', 'New Zealand')
        ]),
        new FormSelectOption('8', 'Shapes', [
            new FormSelectOption('9', 'Square')
        ]),
    ];
}
yurzui

请尝试以下方法:

<ng-template ngFor let-item [ngForOf]="items">
   <optgroup *ngIf="item.children" label="{{item.text}}">
     <option *ngFor="let child of item.children" (click)="select(child.id)">
       {{child.text}}
     </option>
   </optgroup>
   <option *ngIf="!item.children" (click)="select(item.id)">{{item.text}}</option>
</ng-template>

柱塞

语法ngFor:

<li *ngFor="let item of items; let i = index">...</li>
<li template="ngFor let item of items; let i = index">...</li>
<ng-template ngFor let-item [ngForOf]="items" let-i="index"><li>...</li></ng-template>

https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#语法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在angular2中选择的问题

来自分类Dev

在Angular js中选择元素形式list1下拉列表后,如何从list2下拉列表中的数组中删除元素?

来自分类Dev

在Angular js中选择元素形式list1下拉列表后,如何从list2下拉列表中的数组中删除元素?

来自分类Dev

从 Angular6 模板中的选择下拉列表中选择项目时使部分可见

来自分类Dev

从Angular 2中选择所有选项

来自分类Dev

angular 2+ 强制在下拉列表中选择第一个项目

来自分类Dev

如何在 Angular 2 中构建选择值下拉值?

来自分类Dev

不允许在 Angular 中选择下拉列表中的另一个值

来自分类Dev

Angular 2 组件中的组件

来自分类Dev

Angular 2 Dart:如何在导入的子组件中选择和更改元素?

来自分类Dev

如何禁用从Angular JS下拉列表中选择特定选项?

来自分类Dev

在Angular生成的下拉列表中选择默认选项

来自分类Dev

Angular 2组件选择器中的条件

来自分类Dev

使用选择器在Angular 2中动态加载组件

来自分类Dev

angular 2 firebase 下拉选择器

来自分类Dev

循环中的 Angular2 下拉选择

来自分类Dev

如何在Angular 1.5组件中选择元素?

来自分类Dev

Angular + Ngrx:在组件和函数中选择值的最佳实践

来自分类Dev

Angular 2-如何禁用按钮并将其重新启用,直到在下拉列表中选择了某个值?

来自分类Dev

Angular2:未捕获(承诺中):不支持使用引号进行评估!在组件中

来自分类Dev

重用Angular 2中的组件

来自分类Dev

Angular 2中的子组件

来自分类Dev

Angular 2 组件中的继承

来自分类Dev

Angular 2 Select组件集初始选择

来自分类Dev

在“选择”下拉列表中显示默认选择 - Angular

来自分类Dev

每次在Angular 2中选择新选项时如何触发函数?

来自分类Dev

设置选项在Angular2中选择,并带有异步数据加载

来自分类Dev

每次在Angular 2中选择新选项时如何触发函数?

来自分类Dev

Angular 2:以编程方式在表格的所有行中的组合框中选择选项

Related 相关文章

  1. 1

    在angular2中选择的问题

  2. 2

    在Angular js中选择元素形式list1下拉列表后,如何从list2下拉列表中的数组中删除元素?

  3. 3

    在Angular js中选择元素形式list1下拉列表后,如何从list2下拉列表中的数组中删除元素?

  4. 4

    从 Angular6 模板中的选择下拉列表中选择项目时使部分可见

  5. 5

    从Angular 2中选择所有选项

  6. 6

    angular 2+ 强制在下拉列表中选择第一个项目

  7. 7

    如何在 Angular 2 中构建选择值下拉值?

  8. 8

    不允许在 Angular 中选择下拉列表中的另一个值

  9. 9

    Angular 2 组件中的组件

  10. 10

    Angular 2 Dart:如何在导入的子组件中选择和更改元素?

  11. 11

    如何禁用从Angular JS下拉列表中选择特定选项?

  12. 12

    在Angular生成的下拉列表中选择默认选项

  13. 13

    Angular 2组件选择器中的条件

  14. 14

    使用选择器在Angular 2中动态加载组件

  15. 15

    angular 2 firebase 下拉选择器

  16. 16

    循环中的 Angular2 下拉选择

  17. 17

    如何在Angular 1.5组件中选择元素?

  18. 18

    Angular + Ngrx:在组件和函数中选择值的最佳实践

  19. 19

    Angular 2-如何禁用按钮并将其重新启用,直到在下拉列表中选择了某个值?

  20. 20

    Angular2:未捕获(承诺中):不支持使用引号进行评估!在组件中

  21. 21

    重用Angular 2中的组件

  22. 22

    Angular 2中的子组件

  23. 23

    Angular 2 组件中的继承

  24. 24

    Angular 2 Select组件集初始选择

  25. 25

    在“选择”下拉列表中显示默认选择 - Angular

  26. 26

    每次在Angular 2中选择新选项时如何触发函数?

  27. 27

    设置选项在Angular2中选择,并带有异步数据加载

  28. 28

    每次在Angular 2中选择新选项时如何触发函数?

  29. 29

    Angular 2:以编程方式在表格的所有行中的组合框中选择选项

热门标签

归档