gpt4 book ai didi

Angular4,将值从模板传递到组件?

转载 作者:太空狗 更新时间:2023-10-29 18:20:22 26 4
gpt4 key购买 nike

我正在尝试学习 Angular 4,但遇到了绊脚石。

我有以下 app/content.component.ts 文件:

import { Component, Input, OnInit } from '@angular/core';
import { AngularFire, FirebaseListObservable } from 'angularfire2';
import { Content } from './content';

@Component({
selector: 'app-content',
templateUrl: './content.component.html'
})

export class ContentComponent implements OnInit {
@Input() loadScripts: string;
items: FirebaseListObservable<any[]>;
constructor(af: AngularFire) {
this.items = af.database.list('/pages', {
query: {
orderByChild: 'sortOrder',
limitToLast: 100
}
});
}
ngOnInit() {
console.log(this.loadScripts);
}
}

我有以下 app/content.component.html 文件:

<div id="content-{{item.$key}}"  *ngFor="let item of items | async | path : 'path'">
<h2>{{item.title}}</h2>
<div [innerHTML]="item.content | trustedHtml"></div>
</div>

“items”是来自 Firebase 的结果集。我需要将“item.loadScripts”的值传递给 ContentComponent 类中的 loadScripts 变量。

我该怎么做?

最佳答案

您可以自己订阅可观察对象(将其移至 ngOnInit)。在订阅中,您可以设置 this.items 并迭代结果。由于此更改,您希望跟踪您的订阅并在销毁时退订。

import { Component, Input, OnInit, OnDestroy } from '@angular/core';
import { AngularFire, FirebaseListObservable } from 'angularfire2';
import { Content } from './content';

@Component({
selector: 'app-content',
templateUrl: './content.component.html'
})

export class ContentComponent implements OnInit, OnDestroy {
@Input() loadScripts: string;
subscriptions: Array<any> = [];
items: Array<any>;
constructor(private af: AngularFire) {}
ngOnInit() {
this.subscriptions.push(
this.af.database.list('/pages', {
query: {
orderByChild: 'sortOrder',
limitToLast: 100
}
}).subscribe((items) => {
this.items = items;
this.items.forEach((item) => {
// do something with each item.loadScripts
});
});
);
}
ngOnDestroy() {
this.subscriptions.forEach(s => s.unsubscribe());
}
}

确保从您的 html 中删除异步管道。

<div id="content-{{item.$key}}"  *ngFor="let item of items | path : 'path'">
<h2>{{item.title}}</h2>
<div [innerHTML]="item.content | trustedHtml"></div>
</div>

如果您总是想应用过滤器,请将订阅中的代码更新为类似这样的内容(并从 html 中删除过滤器):

this.items = items
.filter((item) => {
return checkPathFilter(item);
});

this.items.forEach((item) => {
// do something with each item.loadScripts
});

如果您总是过滤到 1 个项目,那么您可以一起删除 ngFor 并在订阅中执行此操作:

this.item = items
.find((item) => {
return checkPathFilter(item);
});

this.loadScripts = item.loadScripts;

关于Angular4,将值从模板传递到组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43502312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com