我必须将组件navbar和form-diyalog分开。我想在导航栏中使用form-diyalog中的值。
这是我的navbar.ts
import { Component, OnInit } from "@angular/core";
import { MenuItemModels } from "./models/MenuItemModel";
@Component({
selector: "app-navbar",
templateUrl: "./navbar.component.html",
styleUrls: ["./navbar.component.css"]
})
export class NavbarComponent implements OnInit {
MenuItem: MenuItemModels[] = [
{ name: "Anasayfam", link: "#" },
{ name: "Hakkımızda", link: "#" },
{ name: "Üniversitemiz", link: "#" },
{ name: "Fakültelerimiz", link: "#" },
{ name: "Bize Ulaşın", link: "#" }
];
addItem() {
let customObj = new MenuItemModels();
customObj.name = customObj.link = "#";
this.MenuItem.push(customObj);
}
deleteItem(i) {
this.MenuItem.splice(i, 1);
}
constructor() {}
ngOnInit() {}
}
这是我的表格-diyalog.ts
import { Component, OnInit, Input, Output } from "@angular/core";
import { FormControl } from "@angular/forms";
@Component({
selector: "app-form-diyalog",
templateUrl: "./form-diyalog.component.html",
styleUrls: ["./form-diyalog.component.css"]
})
export class FormDiyalogComponent implements OnInit {
name = new FormControl("");
constructor() {}
ngOnInit() {}
}
这是form-diyalog.html
<label>
Menu Name:
<input type="text" [formControl]="name">
</label>
<p>
Value: {{ name.value }}
</p>
我可以在form-diyalog组件中写入name.value,但不能在navbar组件中写入它。我怎样才能做到这一点?我尝试了@output,@input但我做不到。
答案 0 :(得分:1)
您可以将Rxjs
subject
用作相同的示例,这是如何创建动态主题的示例。因此,每次无需创建新主题即可传递来自其他组件的数据
BrodcastService.ts
interface Event {
key: string;
value: any;
}
@Injectable({
providedIn: 'root'
})
export class Broadcaster {
// subject
protected _eventsSubject = new Subject<Event>();
constructor() {
}
broadcast(key: any, value: any) {
this._eventsSubject.next({ key, value }); // here we are setting the key and value of our subject
}
on<T>(key: any): Observable<T> {
return this._eventsSubject.asObservable()
.pipe(
filter(e => e.key === key),
map(e => e.value)
);
}
}
您要ComponentOne.ts 组件将数据发送到另一个组件
import { Broadcaster } from '../BrodcastService.service';
export class ComponentOne implements OnInit {
constructor(private broadcaster: Broadcaster) { }
someFunction() {
this.broadcaster.broadcast('errorMessage', 'some error');
// this.broadcaster.broadcast('errorMessage', {err: 'some error'});
// you can also pass the object
}
componentTwo.ts //这是消耗主题的组件
import { Broadcaster } from '../BrodcastService.service';
export class componentTwo implements OnInit {
constructor(private broadcaster: Broadcaster) { }
someFunction() {
this.broadcaster.on('errorMessage').subscribe(response => {
console.log(response); // here you are getting the data from the other component
});
}