Угловой маршрутизатор дублирует мой компонент маршрута

#javascript #html #angular #typescript #routes

Вопрос:

У меня есть снимки экрана приложения: https://ibb.co/NmnSPNr и https://ibb.co/C0nwG4D
info.component.ts / Информационный компонент, где дочерний компонент компонента элемента, это отображается, когда я перехожу по этой ссылке.

 export class InfoComponent implements OnInit {
  p: Post;
  paramsSubscription: Subscription;

  constructor(private route: ActivatedRoute) {}

  ngOnInit(): void {
    this.p = {
      id: this.route.snapshot.params['id'],
      name: this.route.snapshot.params['name'],
      price: this.route.snapshot.params['price'],
      place: this.route.snapshot.params['place'],
      image: this.route.snapshot.params['image'],
      date: this.route.snapshot.params['date'],
      desc: this.route.snapshot.params['desc'],
    };
 

**item.component.ts ** / Компонент элемента извлекает только HTTP-запрос и отображает элементы

 export class ItemComponent implements OnInit {
  items: any;
  searchValue: any;

  constructor(private http: HttpService) {}

  ngOnInit(): void {
    this.getAllPosts();
  }

  //GetPost's
  getAllPosts() {
    this.http.getPost().subscribe((res) => {
      this.items = res;
    });
  }
}
 

info.component.html / Это информационный компонент, в котором я храню данные из info.ts

 <div class="container">
  <div class="col-xs-12">
    <div class="imagee-div">
      <img [src]="p.image" alt="snkr1" />
    </div>
    <div class="details">
      <h3>{{ p.id }}. {{ p.name }}</h3>
      <small>release date: {{ p.date }}.</small>
      <p>Price: ${{ p.price }}</p>
      <h4>More Details:</h4>
      <p>
        {{ p.desc }}
      </p>
    </div>
  </div>
</div>
 

item.component.html / Это мой родительский компонент, здесь я храню розетку маршрутизатора, маршрутизационную ссылку и цикл над элементами

 <div class="row mx-auto">
  <div class="col-4">
    <div class="col-12 mt-3" id="main-card">
      <div class="row" id="card" *ngFor="let p of items | filter: searchValue">
        <div class="img-div">
          <img [src]="p.image" alt="" width="250px" />
        </div>
        <div class="main">
          <h4>{{ p.id }}. {{ p.name }}</h4>
          <p>Price: ${{ p.price }}</p>
          <small>{{ p.place }}</small
          ><br />
          <a
            href="#"
            [routerLink]="[
              '/item',
              p.id,
              p.name,
              p.date,
              p.desc,
              p.price,
              p.image
            ]"
          >
            <button class="btn btn-success mt-1">
              <i class="fas fa-question"></i>
            </button>
          </a>
        </div>
      </div>
    </div>
  </div>
  <div class="col-8"><router-outlet></router-outlet></div>
</div>
 

Ответ №1:

Вместо использования <router-outlet> , вы можете использовать <app-info-component> и добавить условие *ngIf в компоненте элемента.

Вместо этого:

 <div class="col-8"><router-outlet></router-outlet></div>
 

Используйте это:

 <div class="col-8">
  <app-info-component *ngIf="p.id > 0">
  </app-info-component>
</div>
 

То же самое в информационном компоненте, которое условие добавления ngIf имеет ниже.

 <div *ngIf="p.id > 0" class="container">
  <div class="col-xs-12">
    <div class="imagee-div">
      <img [src]="p.image" alt="snkr1" />
    </div>
    <div class="details">
      <h3>{{ p.id }}. {{ p.name }}</h3>
      <small>release date: {{ p.date }}.</small>
      <p>Price: ${{ p.price }}</p>
      <h4>More Details:</h4>
      <p>
        {{ p.desc }}
      </p>
    </div>
  </div>
</div>
 

Комментарии:

1. Я пробовал, что это не работает, и мне нужна розетка маршрутизатора, потому что по умолчанию там находится мой компонент home. И когда я выбрал элемент, компонент «Главная страница» исчез, и появились детали.

2. Не могли бы вы поделиться своим примером кодовой базы через codesandbox.io, это поможет мне обойти и дать вам решение. Спасибо.