【问题标题】:How to perform a search function in angular 4?如何在角度 4 中执行搜索功能?
【发布时间】:2018-11-04 20:54:48
【问题描述】:

如标题中所述,我想在角度 4 中执行 search 函数。我在 SpringBoot 后端有 REST 服务,我在 Postman 中调用了它,它工作得很好,但在前端没有角度的。

我的代码在Service.TS

@Injectable()
export class EvenementService {

  private evensUrl_del = 'http://localhost:8080/evenement';
  private headers = new Headers({ 'Content-Type': 'application/json' });
  private options = new RequestOptions({ headers: this.headers });

  constructor(private http: Http) { }

  // Get all events
  getEvenement(): Promise<Evenement[]> {
    return this.http.get(this.evensUrl)
      .toPromise()
      .then(response => response.json() as Evenement[])
      .catch(this.handleError);
  }

  getEvenementByType(typeE: string): Promise<Evenement[]> {
return this.http.get(this.evensUrl_del + '/evenements/' + typeE, this.options)
  .toPromise()
  .then(response => response.json() as Evenement)
  .catch(this.handleError);

} }

我的Component.TS

@Component({
  selector: 'app-evenement',
  templateUrl: './evenement.component.html',
  styleUrls: ['./evenement.component.css']
})
export class EvenementComponent implements OnInit {
  events: Evenement = new Evenement();
  evenmt: Evenement[];
  //e: Evenement[];

  typeE: string;

  constructor(public router: Router, private modalService: NgbModal, private evenementService: EvenementService, private toastyService: ToastyService) { }

  ngOnInit(): void {
    this.typeE="";
    //this.getEvenements();
  }

  ver(events: Evenement, modal) {
    evenmt => this.evenmt = evenmt;
    this.modalService.open(modal, { size: 'lg' });
  }

  searchEvenement(){
    this.evenementService.getEvenementByType(this.typeE).then(evenmt => this.evenmt = evenmt);
  }

  getEvenements() {
    this.evenementService.getEvenement().then(evenmt => this.evenmt = evenmt);
  }
}

终于component.html

<div style="width: 300px;">
            <div class="form-group">
                <label for="typeE"><b>Type</b></label>
                <input type="text" class="form-control" id="typeE" name="typeE" [(ngModel)]="typeE" required>
            </div>

            <div class="btn-group">
                <button type="button" class="btn btn-success" (click)="searchEvenement()">Rechercher</button>
            </div>
    </div>
    <ul>
        <li *ngFor="let e of evenmt">
            <h4>{{e.typeE}} - {{e.prixE}} {{e.dateE}}</h4>
        </li>
    </ul>

使用上面的代码,当我在浏览器中点击搜索按钮时,它会返回以下错误:

ERROR 错误:未捕获(承诺中):响应状态:302 OK for URL:http://localhost:8080/evenement/evenements/degustation 尽管在 Eclipse 终端中,我查找的行已显示。所以我认为问题实际上出在 Angular 中,但我不知道具体在哪里。

有人可以帮我解决这个问题吗?谢谢

【问题讨论】:

  • 首先,我推荐使用Observable!您可以尝试使用 HttpClient,如下所示:return this._http.get(http://localhost:8080/evenement/evenements/${typeE});尝试告诉我是否有效!
  • 感谢@Chiien,但它仍然无法正常工作。同样的错误。
  • 真的吗?抱歉 =(!您尝试使用 Chrome 开发工具?如果 typeE 数据正在传递?正在发送数据?
  • 很抱歉,我遇到了互联网问题...对不起,Chrome 开发工具是什么意思?
  • 放松!好吧,我想知道的是,如果请求正常,您可以使用开发工具,F12 网络查看是否正确发送所有数据!

标签: angular frontend web-frontend


【解决方案1】:

无需承诺您可以将代码修改为:

服务

@Injectable()
export class EvenementService {

    private evensUrl_del = 'http://localhost:8080/evenement';
    private headers = new Headers({ 'Content-Type': 'application/json' });
    private options = new RequestOptions({ headers: this.headers });

    constructor(private http: Http) { }

    // Get all events
    getEvenement(): Promise<Evenement[]> {
        return this.http.get(this.evensUrl)
                    .map(res => res.json())
                    .catch((err) => this.handleError(err));
    }

    getEvenementByType(typeE: string): Promise<Evenement[]> {
        return this.http.get(`${this.evensUrl_del}/evenements/${typeE}`, this.options)
                        .map(res => res.json())
                        .catch((err) => this.handleError(err));
    } 
}

组件

searchEvenement(){
    this.evenementService.getEvenementByType(this.typeE).subscribe(evenmt => {
        setTimeout(() => { <====== You can use timeout
            this.evenmt = evenmt;
        });
    });
}

getEvenements() {
    this.evenementService.getEvenement().subscribe(evenmt => this.evenmt = evenmt);
}

【讨论】:

  • 对不起,我有互联网连接问题,但仍然是同样的错误。使用您的解决方案,在控制台中,它会返回我搜索过的字段,但不会在视图上显示。
  • @BaNRoOt in console you are getting 意味着您正在控制台中获取过滤数据,对吧?
  • @BaNRoOt 你能加ChangeDetectorRef.detectChanges()吗?所以方法定义是:searchEvenement(){ this.evenementService.getEvenementByType(this.typeE).subscribe(evenmt =&gt; { this.evenmt = evenmt; ChangeDetectorRef.detectChanges(); }); }
  • 是的@Anshuman Jaiswal 这就是我的意思。等等,我会发布整个事情的图像......
  • 对不起@Anshuman Jaiswal,但这是同样的错误......仍然不起作用
猜你喜欢
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
相关资源
最近更新 更多