я пытаюсь отправить список из 1 или более генов на свой бэкэнд через угловой интерфейс и веб-контроллер весенней загрузки
моя html-страница:
<div class = "container">
<h1>Clustertool gene(s) input</h1>
<form (ngSubmit) = "onSubmit()" #clusterForm = "ngForm">
<div class = "form-group">
<label for = "gene">gene(s) </label>
<input type = "text" class = "form-control" id = "gene" required>
</div>
<button type = "submit" class = "btn btn-success">Submit</button>
</form>
</div>
компонент
import { Component, OnInit } from '@angular/core';
import { ClustertoolService} from "../../clustertool.service";
@Component({
selector: 'app-cluster-tool',
templateUrl: './cluster-tool.component.html',
styleUrls: ['./cluster-tool.component.css']
})
export class ClusterToolComponent implements OnInit {
onSubmit() {
this.clustertoolService.getCell()
}
constructor(private clustertoolService: ClustertoolService) { }
ngOnInit() {
this.clustertoolService.getCell()
}
}
сервисная страница
import { Injectable } from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {Observable} from "rxjs";
@Injectable({
providedIn: 'root'
})
export class ClustertoolService {
private clusterUrl: string;
constructor(private http: HttpClient) {
this.clusterUrl = 'localhost:8080/clustertool/singleGene';
}
getCell(): Observable<any> {
return this.http.get(this.clusterUrl);
}
}
модуль маршрутизации приложений
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
веб-контроллер
package singleCell.controllers.WebController;
import org.springframework.web.bind.annotation.*;
import singleCell.DatabaseAccess.DAO.DatabaseRetriever;
import java.util.ArrayList;
import java.util.List;
@RestController
@CrossOrigin(origins = "http://localhost:4200")
@RequestMapping("/clustertool")
public class ClusterController {
@RequestMapping(value = "/singleGene", method = RequestMethod.GET)
public ArrayList singleGeneResponse(@RequestParam String gene){
return DatabaseRetriever.getSingleGene(gene);
}
@RequestMapping(value = "/multipleGenes", method = RequestMethod.GET)
public ArrayList multipleGeneResponse(@RequestParam List<String> genes){
System.out.println(genes);
return DatabaseRetriever.getMultipleGenes(genes);
}
}
я хочу, чтобы результат бэкэнда был отправлен во внешний интерфейс, чтобы я мог в дальнейшем использовать его там. собирается делать графики из данных с библиотеками js.
Прежде всего, ваш ClustertoolService.getCell()
должен принимать параметр для gene
getCell(gene: string): Observable<any> {
return this.http.get(this.clusterUrl+'?gene='+gene);
}
Затем вы должны вызвать этот метод при отправке формы с входным значением.
onSubmit() {
this.clustertoolService.getCell(this.geneModel); // geneModel is ngModel for your input.
}
Обновлено: в вашем HTML, вам нужно определить ngModel в поле ввода гена
<input type = "text" class = "form-control" id = "gene" [(ngModel)] = "geneModel" required>
в данный момент ничего не происходит, когда я нажимаю «Отправить», поэтому я думаю, что неправильно обрабатываю форму в своем компоненте. Но я не думаю, что это единственная проблема, я думаю, что мне нужно указать что-то в маршрутизации моего приложения? Я новичок в angular, поэтому мне трудно понять, что делать.