iT邦幫忙

1

第31天~

Tzu 2021-07-31 22:06:46284 瀏覽

這個的前一篇是~https://ithelp.ithome.com.tw/articles/10247045

這個CODE的修改有一點技巧要用編輯器的功能
不然還是會反紅

import { ProductCategory } from './../common/product-category';
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Product } from '../common/product';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class ProductService {

  private baseUrl = 'http://localhost:8080/api/products';

  private categoryUrl = 'http://localhost:8080/api/product-category';

  constructor(private httpClient: HttpClient) { }

  getProductList(theCategoryId: number): Observable<Product[]> {

    const searchUrl = `${this.baseUrl}/search/findByCategoryId?id=${theCategoryId}`;

    return this.httpClient.get<GetResponseProducts>(searchUrl).pipe(
      map(response => response._embedded.products)

    );
  }

  searchProducts(theKeyword: string) {
    throw new Error("Mothod not implemented.");


  }



  getProductCategories(): Observable<ProductCategory[]> {


    return this.httpClient.get<GetResponseProductCategory>(this.categoryUrl).pipe(
      map(response => response._embedded.productCategory)
      );
  }
}

interface GetResponseProducts {
  _embedded: {
    products: Product[];
 }
}

interface GetResponseProductCategory {
  _embedded: {
    productCategory: ProductCategory[];
 }
}

從這裡開始改~到這裡前面的反紅會消失

import { ProductCategory } from './../common/product-category';
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Product } from '../common/product';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class ProductService {

  private baseUrl = 'http://localhost:8080/api/products';

  private categoryUrl = 'http://localhost:8080/api/product-category';

  constructor(private httpClient: HttpClient) { }

  getProductList(theCategoryId: number): Observable<Product[]> {

    const searchUrl = `${this.baseUrl}/search/findByCategoryId?id=${theCategoryId}`;

    return this.httpClient.get<GetResponseProducts>(searchUrl).pipe(
      map(response => response._embedded.products)

    );
  }

  searchProducts(theKeyword: string): Observable<Product[]> {

    const searchUrl = `${this.baseUrl}/search/findByNameContaining?id=${theKeyword}`;

    return this.httpClient.get<GetResponseProducts>(searchUrl).pipe(
      map(response => response._embedded.products)

    );

  }



  getProductCategories(): Observable<ProductCategory[]> {


    return this.httpClient.get<GetResponseProductCategory>(this.categoryUrl).pipe(
      map(response => response._embedded.productCategory)
      );
  }
}

interface GetResponseProducts {
  _embedded: {
    products: Product[];
 }
}

interface GetResponseProductCategory {
  _embedded: {
    productCategory: ProductCategory[];
 }
}

這裡要按"重構"不能用手改,不然還是會反紅
https://ithelp.ithome.com.tw/upload/images/20210801/20119035nweX11pfO5.png
然後選
https://ithelp.ithome.com.tw/upload/images/20210801/20119035HK2Z6hLXaY.png
語法直接跳:
https://ithelp.ithome.com.tw/upload/images/20210801/20119035amQZQE5vEH.png

然後就可以更改
https://ithelp.ithome.com.tw/upload/images/20210801/20119035ZPmJinw3Hl.png

https://ithelp.ithome.com.tw/upload/images/20210801/20119035jCNVXJ2KHf.png

然後再移動code

import { ProductCategory } from './../common/product-category';
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Product } from '../common/product';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class ProductService {

  private baseUrl = 'http://localhost:8080/api/products';

  private categoryUrl = 'http://localhost:8080/api/product-category';

  constructor(private httpClient: HttpClient) { }

  getProductList(theCategoryId: number): Observable<Product[]> {

    const searchUrl = `${this.baseUrl}/search/findByCategoryId?id=${theCategoryId}`;

    return this.getProducts(searchUrl);
  }

  searchProducts(theKeyword: string): Observable<Product[]> {

    const searchUrl = `${this.baseUrl}/search/findByNameContaining?name=${theKeyword}`;

    return this.getProducts(searchUrl);

  }



  private getProducts(searchUrl: string): Observable<Product[]> {
    return this.httpClient.get<GetResponseProducts>(searchUrl).pipe(
      map(response => response._embedded.products)

    );
  }

  getProductCategories(): Observable<ProductCategory[]> {


    return this.httpClient.get<GetResponseProductCategory>(this.categoryUrl).pipe(
      map(response => response._embedded.productCategory)
      );
  }
}

interface GetResponseProducts {
  _embedded: {
    products: Product[];
 }
}

interface GetResponseProductCategory {
  _embedded: {
    productCategory: ProductCategory[];
 }
}


https://ithelp.ithome.com.tw/upload/images/20210801/20119035aPVptP6FkC.png
https://ithelp.ithome.com.tw/upload/images/20210801/201190359I72V30VkM.png

到這裡要先確認app.module.ts 這個檔案裡面是否有加入{path: 'search/:keyword', component: ProductListComponent},這個語法

完整的CODE是

import { ProductService } from './services/product.service';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { ProductListComponent } from './components/product-list/product-list.component';
import { HttpClientModule } from '@angular/common/http';


import {Routes, RouterModule} from '@angular/router';
import { ProductCategoryMenuComponent } from './components/product-category-menu/product-category-menu.component';
import { SearchComponent } from './components/search/search.component';

const rotutes:Routes =[

  {path: 'search/:keyword', component: ProductListComponent},

  {path:'category/:id',component: ProductListComponent},
  {path:'category',component: ProductListComponent},
  {path:'prouducts',component: ProductListComponent},

  {path:'',redirectTo:'prouducts',pathMatch:'full'},
  {path:'**',redirectTo:'prouducts',pathMatch:'full'},


]

@NgModule({
  declarations: [
    AppComponent,
    ProductListComponent,
    ProductCategoryMenuComponent,
    SearchComponent
  ],
  imports: [
    RouterModule.forRoot(rotutes),

    BrowserModule,
    HttpClientModule
  ],
  providers: [ProductService],
  bootstrap: [AppComponent]
})
export class AppModule { }


才可以成功搜尋
https://ithelp.ithome.com.tw/upload/images/20210802/201190356tjJexIkx1.png

這個得下一篇在https://ithelp.ithome.com.tw/articles/10257918


尚未有邦友留言

立即登入留言