angular - Angular 6 Subject下一个方法未在子组件中触发
问题描述
我遇到了一个问题,即子组件未订阅我服务中的主题。我列出了这些任务组件,并且在服务显示中正确初始化了前两个。然后我有一个按钮,它导航到一个表单,该表单调用服务中的 addTask() 方法。我知道这个表单和方法工作正常,因为我的表单正在更新任务数组,我可以通过我的 console.log 语句看到这一点。但是,当我向后导航时,我只看到原始的两个任务,并且我在控制台中看到我的组件 ngOnInit 函数从未被触发。我在表单提交时调用 addTask 方法。该服务在 appmodule 中提供,我的文件夹结构如下:
work-folder:
edit-task-folder (form to add new task)
wi-list-folder (component to list tasks. No being updated here)
workitemservice.ts
服务
export class WorkItemService {
tasksChanged = new Subject<Task[]>();
private tasks: Task[] = [
new Task(
'example title',
'this is the task desciption',
4
),
new Task(
'example title2',
'this is the task desciption2',
4
)
];
addTask(task: Task) {
this.tasks.push(task);
this.tasksChanged.next(this.tasks.slice());
console.log('tasks in service', this.tasks.slice());
}
getTasks(){
console.log('getTasks() returns: ', this.tasks);
return this.tasks.slice();
}
这是我的组件文件:
subscription: Subscription;
tasks: Task[];
constructor(private workItemService: WorkItemService,
private route: ActivatedRoute,
private router: Router) { }
ngOnInit() {
this.subscription = this.workItemService.tasksChanged
.subscribe(
(tasks: Task[]) => {
this.tasks = tasks;
console.log('tasks in subscription', this.tasks)
}
);
this.tasks = this.workItemService.getTasks();
}
感谢您的任何帮助!
更新:
该问题已通过在组件文件中删除服务作为提供程序来解决>
解决方案
推荐阅读
- php - (PHP) 试图控制包含函数
- r - R ggplot2 geom_bar barplot:在不修改数据框的情况下按计数对条形图进行排序,并且因子标签具有含义
- python-datetime - 通过排除 pandas 数据框中的非营业时间来计算两个日期之间的营业时间
- azure - 通过 API 检索 Azure AppInsights 实时指标
- vue.js - Vue没有看到从单独组件传递的函数
- javascript - 如何在 Web Worker 中使用 Azure App Insights?
- javascript - 我的复选框通过真假,但我需要 0 或 1
- python - Django:将带有 HTML 和 Django 模板标签的 Views.py 中的字符串变量注入 HTML 文件
- javascript - 通过javascript重新加载后,如何让我的下拉菜单选择一个值
- java - 如何声明一个通用变量