【发布时间】:2018-10-30 14:48:34
【问题描述】:
我正在尝试在 .Net Core 2.1 + Angular 应用程序中从我的数据库中删除一个对象。每次我拨打电话时都会创建两条记录。
在调试时,似乎调用已发出并发生了两次。控制台的网络选项卡显示两个重复的调用,并且在服务器上侦听时,每个断点都被迭代两次。这些调用是一致发生的,而不是顺序发生的,因为我必须在每个断点单击两次才能继续下一个。
我已经研究过使用共享运算符,但要么没有帮助,要么我没有正确实施?
任何帮助表示赞赏,
Module.ts
import { BusinessUnitService } from './../../services/business-
unit.service';
import { Component, OnInit } from '@angular/core';
import { MatDialogRef } from '@angular/material';
import { ToastrService } from 'ngx-toastr';
import 'rxjs/add/operator/share';
@Component({
selector: 'app-businessunit-create',
templateUrl: './businessunit-create.component.html',
styleUrls: ['./businessunit-create.component.css']
})
export class BusinessunitCreateComponent implements OnInit {
companies = [];
businessUnit: any = {};
constructor(private dialogRef: MatDialogRef<BusinessunitCreateComponent>,
private businessUnitService: BusinessUnitService,
private toastr: ToastrService) { }
ngOnInit() {
this.businessUnitService.getCompanies().subscribe(res => {
this.companies = res;
console.log(res);
});
}
createBusinessUnit() {
console.log(this.businessUnit);
this.businessUnitService.addBusinessUnit(this.businessUnit).share().subscribe(res => {
this.toastr.success('New Line of Business added successfully');
this.dialogRef.close('ok');
},
err => {
this.toastr.error('Line of Business could not be added: ' + err);
});
}
}
Service.ts
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { map } from 'rxjs/internal/operators/map';
import { share } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class BusinessUnitService {
addBusinessUnit(bu) {
return this.http.post('/BusinessUnit/NewBusinessUnit', bu).pipe(share());
}
HTML 调用位置
<mat-dialog-actions>
<button class="mat-raised-button" (click)="close()">Close</button>
<button class="mat-raised-button mat-primary" (click)="createBusinessUnit()"
[disabled]="!f.valid">Save Line of Business</button>
</mat-dialog-actions>
*为清晰起见进行了编辑
【问题讨论】:
-
“在调试过程中,调用似乎已经发出并发生了” - 你看到的是一个 HTTP 调用,还是两个?
-
调试时,HTTP 调用进行了两次。控制器端的函数被调用了两次,控制台的网络选项卡显示了两次调用。
-
要进行故障排除,您可能需要将
debugger语句放在被调用两次的方法中。浏览器开发工具将在此时停止,您可以检查堆栈跟踪以查看调用来自何处。 -
请发布您的管道方法“share()”的代码。我怀疑问题出在那儿。
-
我看到你有
import 'rxjs/add/operator/share';(rxjs5) 和import { share } from 'rxjs/operators';(rxjs6+)。我假设您使用 rxjs-compat 可以同时使用两者,但我不知道这是否会导致某种冲突。如果您在组件中删除.share(),结果会以某种方式发生变化?另外,为了确保您的方法createBusinessUnit()只被调用一次?
标签: angular typescript post duplicates httprequest