我想通过从对象阵列-TYPESCRIPT中选择元素来进行动态路由

费萨尔·莫尼丁

1. all-trades.component.ts

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-all-trades',
  templateUrl: './all-trades.component.html',
  styleUrls: ['./all-trades.component.css'],
})
export class AllTradesComponent implements OnInit {

// This is my Array of Object

  crops = [
    {
      name: 'Rice',
      checked: true,
      subCategory: [
        {
          id: 1,
          name: 'Basmati',
          isActive: true,
        },
        {
          id: 2,
          name: 'Ammamore',
          isActive: true,
        },
      ],
    },
    {
      name: 'Wheat',
      checked: true,
      subCategory: [
        {
          id: 1,
          name: 'Durum',
          isActive: true,
        },
        {
          id: 2,
          name: 'Emmer',
          isActive: true,
        },
      ],
    }, {
      name: 'Barley',
      checked: true,
      subCategory: [
        {
          id: 1,
          name: 'Hulless Barley',
          isActive: true,
        },
        {
          id: 2,
          name: 'Barley Flakes',
          isActive: true,
        },
      ],
    }
  ]



  onChange(event, index, item) {
    item.checked = !item.checked;
    console.log(index, event, item);
  }

  constructor(private route: ActivatedRoute) { }

  ngOnInit(): void { }

  
}

2. all-trades.component.html

<app-header></app-header>
<div
  fxLayout="row"
  fxLayout.lt-md="column"
  fxLayoutAlign="space-between start"
  fxLayoutAlign.lt-md="start stretch"
>
  <div class="container-outer" fxFlex="20">
    <div class="filters">
      <section class="example-section">
        <span class="example-list-section">
          <h1>Select Crop</h1>
        </span>
        <span class="example-list-section">
          <ul>
            <li *ngFor="let crop of crops">
              <mat-checkbox
                [checked]="crop.checked"
                (change)="onChange($event, i, crop)"
              >
                {{ crop.name }}
              </mat-checkbox>
            </li>
          </ul>
        </span>
      </section>

      <section class="example-section">
        <span class="example-list-section">
          <h1>Select District</h1>
        </span>
        <span class="example-list-section">
          <ul>
            <li *ngFor="let district of districts">
              <mat-checkbox>
                {{ district.name }}
              </mat-checkbox>
            </li>
          </ul>
        </span>
      </section>
    </div>
  </div>
  <div class="content container-outer" fxFlex="80">
    <mat-card
      class="crop-card"
      style="min-width: 17%"
      *ngFor="let crop of crops"
      [hidden]="!crop.checked"
    >
    <!-- I tried the logic here to navigate to sub-Category Array by its id.
    But I failed -->
      <a
        [routerLink]="['/all-trades', crop.id]"
        routerLinkActive="router-link-active"
      >
        <mat-card-header>
          <img
            mat-card-avatar
            class="example-header-image"
            src="/assets/icons/crops/{{ crop.name }}.PNG"
            alt="crop-image"
          />
          <mat-card-title>{{ crop.name }}</mat-card-title>
          <mat-card-subtitle>100 Kgs</mat-card-subtitle>
        </mat-card-header>
      </a>
      <mat-card-content>
        <p>PRICE</p>
      </mat-card-content>
    </mat-card>
  </div>
</div>

<app-footer></app-footer>

在此处输入图片说明

你们在这里可以在我的网页上看到几张名为“ RICE”,“ WHEAT”,“ BARLY”的卡,我只想通过单击RICE来完成,我的代码应导航到另一个组件页面并显示名称我的对象数组中的subCategory名称。同样,它也应适用于“ WHEAT”和“ BARLEY”。例如:当我单击Wheat Card时,它应导航到其他页面并显示Wheat部分的子类别名称。

crops = [
    {
      name: 'Rice', <---- 1. Go here
      checked: true,
      subCategory: [ <-- 2. Go to subCategory and fetch the name of the "RICE" on different Page
        {
          id: 1,
          name: 'Basmati',
          isActive: true,
        },
        {
          id: 2,
          name: 'Ammamore',
          isActive: true,
        },
      ],
    },
    {
      name: 'Wheat',
      checked: true,
      subCategory: [
        {
          id: 1,
          name: 'Durum',
          isActive: true,
        },
        {
          id: 2,
          name: 'Emmer',
          isActive: true,
        },
      ],
    }, {
      name: 'Barley',
      checked: true,
      subCategory: [
        {
          id: 1,
          name: 'Hulless Barley',
          isActive: true,
        },
        {
          id: 2,
          name: 'Barley Flakes',
          isActive: true,
        },
      ],
    }
  ]
帕拉维

您可以使用BehaviorSubject进行相同的操作

app-routing.component.ts //定义路径

 const routes: Routes = [
 //other routes
 { path:'crop/:name', component:CropComponent}
 ]
 

crop.ts //为裁剪界面建模

export class crop{
  name: string;
  checked: boolean;
  subCategory:Subcategory[];

}

export class Subcategory{
   id: number;
   name: string;
   isActive: boolean;
}

service.ts //创建主题并定义getter和setter方法

export class CropService {
private selectedCrop= new BehaviorSubject<Crop>(null);

setCrop(crop:Crop){
 this.selectedCrop.next(crop);
 }

getCrop(){
return this.selectedCrop.asObservable().pipe(skipWhile(val=> val === null)); 
}

}

all-trades.component.html //用click事件替换routerLink

<mat-card
  class="crop-card"
  style="min-width: 17%"
  *ngFor="let crop of crops"
  [hidden]="!crop.checked"
>

  <a
   (click)="onSelect(crop)"
    routerLinkActive="router-link-active"
  >
    <mat-card-header>
      <img
        mat-card-avatar
        class="example-header-image"
        src="/assets/icons/crops/{{ crop.name }}.PNG"
        alt="crop-image"
      />
      <mat-card-title>{{ crop.name }}</mat-card-title>
      <mat-card-subtitle>100 Kgs</mat-card-subtitle>
    </mat-card-header>
  </a>
  <mat-card-content>
    <p>PRICE</p>
  </mat-card-content>
</mat-card>

all-trades.component.ts //发出选定的作物并路由到相同的组件

constructor(private service: Cropservice, private router:Router){}

onSelect(selectedCrop:Crop){
this.service.setCrop(selectedCrop);
this.router.navigateByUrl(`crop/${crop.name}`);
}

crop.component.ts //订阅主题并在本地存储作物数据

crop: Crop
export class CropComponent implements OnInit{

ngOnInit(){
this.service.getCrop().subscribe((selectedCrop:Crop)=>this.crop = 
selectedCrop)
}
}

crop.component.html

<div *ngFor="let category of crop.subCategory">{{category.id}}</div>

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我想通过从下拉列表中选择颜色来更改面板的背景颜色

来自分类Dev

通过从熊猫的给定列表中选择随机元素来创建列

来自分类Dev

通过从动态html(jquery)中的数据中查找元素来获取ID

来自分类Dev

通过从动态html(jquery)中的数据中查找元素来获取ID

来自分类Dev

通过从现有对象中获取一些元素来创建一个新对象

来自分类Dev

我想通过单击“编辑”来选择整行进行编辑

来自分类Dev

Linq通过从两个int类型的列表中进行比较来选择对象

来自分类Dev

我想通过使用扩展选择参数来选择多个选项,并从这些选项中我想通过传递一个匹配项来运行作业

来自分类Dev

如何检查禁用的选择元素,我想通过检查来更改禁用元素的不透明度

来自分类Dev

我想通过选择用户在Laravel中输入的ID来合并两个表

来自分类Dev

我想通过javascript选择一个特定的td来放置一些类

来自分类Dev

我想通过加载外部.js来更改具有相同类名的元素的样式

来自分类Dev

使用NodeJS进行动态对象遍历

来自分类Dev

合并对象以进行动态 rethinkdb 查询

来自分类Dev

我的笔记本电脑上装有ubuntu 14.04,我想通过双启动Windows 8.1进行安装

来自分类Dev

我只想通过 ngAutocomplete 显示“印度”的所有城市..???我必须在 ngAutocomplete 中进行哪些更改..?

来自分类Dev

通过从 ComboBox 中选择任何表来填充 DataGridView

来自分类Dev

我想通过Excel单元格中的名称更改用户窗体中选项按钮的值

来自分类Dev

从json对象中选择元素

来自分类Dev

jQuery-通过从窗口大小中减去像素来计算元素宽度

来自分类Dev

通过从R中的列表中提取元素来创建向量

来自分类Dev

如何通过从头到尾移动N个元素来旋转数组?

来自分类Dev

我想通过SQL根据另一个列从两个表中选择两个不同的列

来自分类Dev

我想通过连接和动态将一些数据转换为 SQL Server 中的数据透视表

来自分类Dev

想通过循环获取 json 的内部元素

来自分类Dev

我想通过使用表显示MySQL数据库来检索数据,以与图像中显示的相同的方式进行排列

来自分类Dev

我想通过单击在动态图表上动态更新我的系列,并通过单击其他按钮将其恢复为原始方式(#previous)

来自分类Dev

从单元阵列中选择单个元素

来自分类Dev

jq:通过从对象/嵌入式数组中有选择地选择值来形成CSV

Related 相关文章

  1. 1

    我想通过从下拉列表中选择颜色来更改面板的背景颜色

  2. 2

    通过从熊猫的给定列表中选择随机元素来创建列

  3. 3

    通过从动态html(jquery)中的数据中查找元素来获取ID

  4. 4

    通过从动态html(jquery)中的数据中查找元素来获取ID

  5. 5

    通过从现有对象中获取一些元素来创建一个新对象

  6. 6

    我想通过单击“编辑”来选择整行进行编辑

  7. 7

    Linq通过从两个int类型的列表中进行比较来选择对象

  8. 8

    我想通过使用扩展选择参数来选择多个选项,并从这些选项中我想通过传递一个匹配项来运行作业

  9. 9

    如何检查禁用的选择元素,我想通过检查来更改禁用元素的不透明度

  10. 10

    我想通过选择用户在Laravel中输入的ID来合并两个表

  11. 11

    我想通过javascript选择一个特定的td来放置一些类

  12. 12

    我想通过加载外部.js来更改具有相同类名的元素的样式

  13. 13

    使用NodeJS进行动态对象遍历

  14. 14

    合并对象以进行动态 rethinkdb 查询

  15. 15

    我的笔记本电脑上装有ubuntu 14.04,我想通过双启动Windows 8.1进行安装

  16. 16

    我只想通过 ngAutocomplete 显示“印度”的所有城市..???我必须在 ngAutocomplete 中进行哪些更改..?

  17. 17

    通过从 ComboBox 中选择任何表来填充 DataGridView

  18. 18

    我想通过Excel单元格中的名称更改用户窗体中选项按钮的值

  19. 19

    从json对象中选择元素

  20. 20

    jQuery-通过从窗口大小中减去像素来计算元素宽度

  21. 21

    通过从R中的列表中提取元素来创建向量

  22. 22

    如何通过从头到尾移动N个元素来旋转数组?

  23. 23

    我想通过SQL根据另一个列从两个表中选择两个不同的列

  24. 24

    我想通过连接和动态将一些数据转换为 SQL Server 中的数据透视表

  25. 25

    想通过循环获取 json 的内部元素

  26. 26

    我想通过使用表显示MySQL数据库来检索数据,以与图像中显示的相同的方式进行排列

  27. 27

    我想通过单击在动态图表上动态更新我的系列,并通过单击其他按钮将其恢复为原始方式(#previous)

  28. 28

    从单元阵列中选择单个元素

  29. 29

    jq:通过从对象/嵌入式数组中有选择地选择值来形成CSV

热门标签

归档