angular - 成功创建后如何重新加载列表中的数据?
问题描述
我正在使用离子和角度创建一个简单的 CRUD 应用程序。我能够执行所有 CRUD 功能。我现在的问题是,当我将新对象添加到数据库中时,我不知道如何重新加载列表。我创建了一个添加按钮(在查看数据页面上)来打开一个创建页面,添加完成后我导航回查看数据页面,但列表不会更新。
我试图在 NgOnInit 或 Constructor 中包含将数据加载到列表变量中的函数,但这也不起作用。
我还尝试使用事件发射器从列表视图页面调用 GetAnime 函数(在我创建一个新条目之后),但我也无法让它工作。
这是我的视图数据页面 .ts 文件的代码
import { Component, OnInit } from "@angular/core";
import { Anime } from "src/app/Classes/anime";
import { DataServiceService } from "src/app/Services/data-service.service";
import {EventEmitterService} from '../../Services/event-emitter.service';
import { Router } from "@angular/router";
import { Validators, FormBuilder, FormGroup } from "@angular/forms";
import {ModalPage} from '../modal/modal.page';
import { ModalController } from '@ionic/angular';
import { NgModel } from '@angular/forms';
@Component({
selector: "app-anime",
templateUrl: "./anime.page.html",
styleUrls: ["./anime.page.scss"],
})
export class AnimePage implements OnInit {
AnimeArray: Anime[] = [];
// CurrentAnime : Anime;
constructor(
private dataService: DataServiceService,
private router: Router,
public modalController: ModalController,
private eventEmitterService: EventEmitterService,
)
{
this.GetAnime();
} //Constructor
ngOnInit() {
if (this.eventEmitterService.subsVar==undefined) {
this.eventEmitterService.subsVar = this.eventEmitterService.
CallGetAnime.subscribe((name:string) => {
this.firstFunction();
});
}
} //ngOnInit
CreateAnime(){
this.router.navigate(['/anime/create-anime']);
}
GetAnime(): void {
this.dataService.GetAnime().subscribe((data) =>
data.forEach((element) => {
var anime = new Anime();
anime.AnimeID = element.AnimeID;
anime.AnimeName = element.AnimeName;
anime.Anime_Description = element.Anime_Description;
this.AnimeArray.push(anime);
})//For each
);//Subscribe
} // Get Anime
async ItemClick(ItemID : number){
var CurrentAnime = this.AnimeArray.find(ca => ca.AnimeID == ItemID);
const modal = await this.modalController.create({
component : ModalPage,
componentProps : {
'CurrentAnime' : CurrentAnime,
'ModalTitle' : 'Manage Anime'
}
});
await modal.present();
modal.onDidDismiss().then( (data : any) => {
try {
if(data.data.Delete == true)
{
this.dataService.DeleteAnime(data.data.ID)
.subscribe( () => {
this.AnimeArray = [];
this.GetAnime();
});
}//if
}//try
catch (error) {
}
})
}// Async Item Click
} //Export
这是创建页面 .ts 文件的代码
import { Component, OnInit } from '@angular/core';
import { Router } from "@angular/router";
import { DataServiceService } from "src/app/Services/data-service.service";
import {EventEmitterService} from '../../../Services/event-emitter.service';
import { Anime } from "src/app/Classes/anime";
import { Validators, FormBuilder, FormGroup } from "@angular/forms";
// import { Events } from '@ionic/angular';
@Component({
selector: 'app-create-anime',
templateUrl: './create-anime.page.html',
styleUrls: ['./create-anime.page.scss'],
})
export class CreateAnimePage implements OnInit {
private CreateAnimeForm: FormGroup;
private ErrorMessage: string;
public message : string;
constructor(
private dataService: DataServiceService,
private router: Router,
private formBuilder: FormBuilder,
private eventEmitterService: EventEmitterService
){
this.CreateAnimeForm = this.formBuilder.group({
AnimeName: ["", Validators.required],
Anime_Description: ["", Validators.required],
});
}//Constructor
CreateAnime(AnimeForm : FormBuilder){
const anime = AnimeForm.value;
this.dataService.AddAnime(anime).subscribe(() => {
this.message = 'Anime has been saved successfully';
//this.CreateAnimeForm.reset();
// this.events.publish('functionCall:LoadAnimeData');
this.eventEmitterService.CallGetAnime;
});
}
ngOnInit() {
}
}
ps 所有的 Cruding 都可以,只需在我添加或编辑数据后更新我的列表即可。我认为解决我的添加问题的方法对于编辑也是一样的。我正在使用 ionic 6.2.2 和 angular 9
解决方案
我终于找到了答案。我使用下面链接的这篇文章来解决我遇到的问题。 https://stackoverflow.com/a/47068263/12765810
ps 使用import { Subject } from 'rxjs/Subject' did not
所以我
import { Subscription } from 'rxjs';
改用。而且,添加private subscription: Subscription;
到构造函数给了我一个错误,所以我将它作为变量添加到构造函数之上。
推荐阅读
- c++ - Qt中的RGB图像处理
- html - 删除 .ui-state-default
- php - 按 ID 获取自定义帖子类型的帖子内容
- quill - QuillJS:在文本中添加信息
- regex - 在制表符分隔的记录上使用 regexp_substr,字段中有空格
- php - [Route: admin.edit] [URI: customer/account/edit/{id}] 缺少必需的参数
- c# - LINQ GroupBy 错误:运算符 && 不能用于“字符串”和“字符串”类型的操作数
- python - 将多行数据转换为单列
- angular - Angular 防护中的异步代码无法打开页面
- windows - 从导入库中获取 dll 名称