当我单击链接转到我的食谱页面时,在 shopping-edit.component.ts 中的 ngOnDestroy 方法期间取消订阅时出现错误。这是图像
这是我的 git 的链接https://github.com/CHBaker/First-Angular-App
和我的代码片段:
import {
Component,
OnInit,
OnDestroy,
ViewChild
} from '@angular/core';
import { NgForm } from '@angular/forms';
import { Subscription } from 'rxjs/Subscription';
import { Ingredient } from '../../shared/ingredient.model';
import { ShoppingListService } from '../shopping-list.service';
@Component({
selector: 'app-shopping-edit',
templateUrl: './shopping-edit.component.html',
styleUrls: ['./shopping-edit.component.css']
})
export class ShoppingEditComponent implements OnInit, OnDestroy {
@ViewChild('f') slForm: NgForm;
subscription: Subscription;
editMode = false;
editedItemIndex: number;
editedItem: Ingredient;
constructor(private slService: ShoppingListService) { }
ngOnInit() {
this.slService.startedEditing
.subscribe(
(index: number) => {
this.editedItemIndex = index;
this.editMode = true;
this.editedItem = this.slService.getIngredient(index);
this.slForm.setValue({
name: this.editedItem.name,
amount: this.editedItem.amount
})
}
);
}
onSubmit(form: NgForm) {
const value = form.value;
const newIngredient = new Ingredient(value.name, value.amount);
if (this.editMode) {
this.slService.updateIngredient(this.editedItemIndex, newIngredient);
} else {
this.slService.addIngredient(newIngredient);
}
this.editMode = false;
form.reset();
}
onClear() {
this.slForm.reset();
this.editMode = false;
}
onDelete() {
this.slService.deleteIngredient(this.editedItemIndex);
this.onClear();
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
Run Code Online (Sandbox Code Playgroud)
偶然发现了类似的问题,因为我无法在 期间订阅ngOnInit。
所以简单地通过以下方式修复:
ngOnDestroy(): void {
if (this.subscription) {
this.subscription.unsubscribe();
}
}
Run Code Online (Sandbox Code Playgroud)
尝试这个
this.subscription = this.slService.startedEditing
.subscribe(
(index: number) => {
this.editedItemIndex = index;
this.editMode = true;
this.editedItem = this.slService.getIngredient(index);
this.slForm.setValue({
name: this.editedItem.name,
amount: this.editedItem.amount
})
}
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14074 次 |
| 最近记录: |