【发布时间】:2019-07-17 16:38:25
【问题描述】:
我最近开始使用新语法研究 Angular 的最新版本,但我熟悉 Angular v1。
我正在做一个 ionic(v4.12.0) 项目,下面是示例 angular(v7.2.15) 服务TodoService
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class TodoService {
private todos = [];
constructor(private http: HttpClient) {
console.log('Constructor TodoService');
}
list() {
// log shows this.todos as empty, always
return this.todos;
}
add(todo object) {
this.todos.push(todo);
// log shows this.todos having 1 element now. it never goes beyond 1 irrespective of the number of todos added from the modal form
}
}
我创建了一个模态TodoAddPage 来读取表单并将条目添加到TodoService 中的todos
import { Component, Input, OnInit } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { ModalController } from '@ionic/angular';
import { TodoService } from './todo.service';
@Component({})
export class TodoAddPage implements OnInit {
constructor(
private modalController: ModalController,
private todoService: TodoService
) {}
close() {
this.modalController.dismiss({
dismissed: true
});
}
onSubmit(todo: object) {
this.todoService.add(todo);
this.close();
}
}
一个页面TodosPage 列出来自TodoService 的待办事项
import { Component, OnInit } from '@angular/core';
import { AlertController, ModalController } from '@ionic/angular';
import { TodoAddPage } from './todo-add.page';
import { TodoService } from './todo.service';
@Component({})
export class TodosPage implements OnInit {
public todos = [];
constructor(
private modalController: ModalController,
private todoService: TodoService
) {
this.todos = this.todoService.list();
}
ngOnInit() {
}
async add() {
const modal = await this.modalController.create({
component: TodoAddPage,
componentProps: { value: 123 }
});
await modal.present();
const { data } = await modal.onWillDismiss();
console.log(data);
console.log(this.todoService.list()); // Issues: This is always empty
}
}
问题是TodoService.list() 总是返回空列表。我检查了在TodoService.add 函数中添加日志。并且数据似乎在.add 函数中.push 之后的TodoService.todos 中。但是如果我访问它立即关闭模式,.list() 函数返回的内容是空的。
这种行为似乎有点奇怪,有人遇到过这个问题吗?还是我在这里做错了什么?
【问题讨论】:
-
你能不能创建一个 stackblitz 以便我们运行它