Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Цикл отрабатывает несколько раз (https://javascript.ru/forum/angular/76808-cikl-otrabatyvaet-neskolko-raz.html)

stim644 15.02.2019 17:29

Цикл отрабатывает несколько раз
 
Всем привет. Столкнулся с проблемой, что цикл отрабатывает несколько раз. Сейчас привет пример в коде.
app.component.Html:
<div *ngFor="let item of offers1(); let i = index" >
<button type="button" class="btn btn-secondary" (click)="fetchOffer(2)" >edit</button>
</div>

Ts:
import { Component } from '@angular/core';
import { LogManagerService } from './_modules/LogginService/log-manager.service';
import {Router} from '@angular/router';
import {Offer} from './models/Offer';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'appspress-tracker-frontend';

  constructor(private logger: LogManagerService) {
    logger.debug('AppComponent initialized');
  }

  offers1() {
    this.logger.debug('offers log');
    const mockRepository = {
      getOffers: function () {
        return [
          new Offer(1, 'test1', ['RU', 'BR', 'IN']),
          new Offer(2, 'test2', ['GB']),
          new Offer(3, 'test3', ['RU']),
          new Offer(3, 'test3', ['RU']),
          new Offer(3, 'test3', ['RU'])
        ];
      }
    };
    return mockRepository.getOffers();
  }

  fetchOffer(id) {
    this.logger.debug('offers log');
  }
}


Т.е. метод offers1 вызывается по несколько раз, когда отображается компонент. Даже и не могу понять, в чем может быть проблема. Подскажете?

destus 17.02.2019 10:18

Цитата:

Даже и не могу понять, в чем может быть проблема
Внутренняя кухня ангуляра, т.е. при каждом ChangeDetection, метод offers1 возвращает новую ссылку на массив. https://github.com/angular/angular/i...ment-165015520
Вызывайте этот метод где-нибудь в OnInit, записывайте результат в переменную и оперируйте в шаблоне именно ей.

stim644 18.02.2019 12:36

Цитата:

Сообщение от destus (Сообщение 503723)
Внутренняя кухня ангуляра, т.е. при каждом ChangeDetection, метод offers1 возвращает новую ссылку на массив. https://github.com/angular/angular/i...ment-165015520
Вызывайте этот метод где-нибудь в OnInit, записывайте результат в переменную и оперируйте в шаблоне именно ей.

Да, спасибо. Понял. Просто я столкнулся именно с этой проблемой когда не понял, почему у меня ангуляровское событие click не срабатывает, когда я нажимаю на кнопку edit, срабатывает событие и я проваливаюсь в шаблон конкретного офера, потом захожу через меню снова в шаблон список офферов и пытаюсь снова нажать на кнопку. Но событие не срабатывает во второй раз! Подскажите почему такое может произойти? Спасибо!

stim644 18.02.2019 17:55

В общем была проблема из за <ng-selectize [config]="tagsConfig" [(ngModel)]="tagsVal"></ng-selectize>


Часовой пояс GMT +3, время: 05:09.