javascript - 将 HTML 中的组件标签链接到构造函数中传递的组件
问题描述
一般来说,我对 Angular 和 TypeScript 还是很陌生。
在我的 AppComponent HTML 中,我注入了另一个组件
<app-listpost></app-listpost>
但是在 TypeScript 中,我也收到了这个组件,因为我的 AppComponent 导入了我的 ListPostComponent 以便从 AppComponent 中的 ListPostComponent 调用一个函数。
该函数只是将一个对象添加到 ListPostComponent 的数组中
因此,我发现从 AppComponent 调用该函数是可行的,但与 AppComponent 一起使用的数组来自另一个实例,而不是 ListPostComponent 中使用 HTML 标记实例化的数组。
app.component.html
<div style="text-align:center">
<h1>
{{ getTitle() }}
</h1>
</div>
<app-listpost></app-listpost>
<button class="btn btn-success" (click)="addPostToList('test title from AppComponent', 'test content from AppComponent')">Add test post</button>
app.component.ts
import { Component } from '@angular/core';
import { ListpostComponent } from './listpost/listpost.component'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
providers:[ListpostComponent]
})
export class AppComponent {
title = 'Exercise';
constructor(private listPostComp: ListpostComponent){}
public addPostToList(newTitle, newContent){
this.listPostComp.addPostToList(newTitle, newContent);
}
getTitle(){
return this.title;
}
}
listpost.component.html
<button class="btn btn-success btn-test" (click)="addPostToList('test title from ListPostComponent', 'test content from ListPostComponent')">Add test post</button>
<div class="container">
<div class="row">
<div class="col-xs-12">
<ul class="list-group">
<app-post *ngFor="let post of getListPosts()"
[Title]="post.title"
[Content]="post.content"></app-post>
</ul>
</div>
</div>
</div>
listpost.component.ts
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
@Component({
selector: 'app-listpost',
templateUrl: './listpost.component.html',
styleUrls: ['./listpost.component.scss'],
changeDetection: ChangeDetectionStrategy.Default
})
export class ListpostComponent implements OnInit {
private listPosts = [
{
title: 'Post example',
content: 'Content example'
}
];
constructor() { }
ngOnInit() {
}
addPostToList(newTitle, newContent){
let newPost = {
title: newTitle,
content: newContent
}
this.listPosts.push(newPost);
console.log("Added new post with title : \"" + newTitle + "\" and content : \"" + newContent + "\"");
console.log(this.listPosts); //DEBUG
}
getListPosts(){
return this.listPosts;
}
}
最终目标是单击 app.component.html 中的按钮将调用listpost.component.ts中的函数,将对象添加到数组中,并且listpost.component.html中的显示将使用新添加的对象刷新。
由于我上面解释的原因,当我单击 listpost.component.html 中的按钮而不是app.component.html中的按钮时,它可以工作。
因此,有没有办法让我指定我想使用我在 HTML 标记的 AppComponent 的构造函数中收到的 ListPostComponent 的实例<app-listpost></app-listpost>
?
解决方案
我认为最佳实践是创建一个可注入服务,其中包含具有您的addPostToList()
逻辑的功能。然后在您的中创建另一个函数ListPostComponent
,调用该服务函数并更新listPosts
. 然后在您AppComponent
的ListPostComponent
.
推荐阅读
- reactjs - 如何使用 map 方法在 textarea 标签内添加动态内容
- reactjs - 选择动态 - reactjs
- vue.js - 为什么我的路由在 vue-js 中改为延迟加载路由后无法正常工作?
- php - 尝试创建新的 Laravel 项目时出现此错误
- linux - GNU M4 似乎在 ifelse 中访问了不必要的值
- vb.net - 图片框的 GetType.GetProperties
- javascript - 当我在 React.js 中更改活动选项卡时,如何防止状态数据被清除?
- c++ - 替换 .o 文件 makefile 中的所有棋子
- python - 如何将字符串的所有第一个字符分组到字符串列表中,字符串的所有第二个字符等等在python中的字符串列表中
- javascript - 店面 UI - SfComponentSelect 无法正常工作