gpt4 book ai didi

angular - Angular 2 和 Angularfire2 中的三种方式绑定(bind)

转载 作者:太空狗 更新时间:2023-10-29 17:03:22 24 4
gpt4 key购买 nike

我正在尝试使用 AngularFire 2 (2.0.0-beta.2) 将输入元素三向绑定(bind)到 Angular.js 2 (2.0.0-rc.4) 中的 firebase 数据库。

我有一个非常简单的 html,例如:

<form (ngSubmit)="onSubmit()" #commentForm="ngForm">
<input [(ngModel)]="model.author" type="input" name="author" required>
</form>

在我的组件中,为了保存和检索此输入到 firebase 的内容,我有一个这样的实现:

export class CommentFormComponent implements OnInit, AfterViewInit {
@ViewChild("commentForm") form;
// http://stackoverflow.com/questions/34615425/how-to-watch-for-form-changes-in-angular-2

firebaseInitComplete = false;
model: Comment = new Comment("", "");
firebaseForm: FirebaseObjectObservable<Comment>;

constructor(private af: AngularFire) { }

ngAfterViewInit() {
this.form.control.valueChanges
.subscribe(values => {
// If we haven't get the initial value from firebase yet,
// values will be empty strings. And we don't want to overwrite
// real firebase value with empty string on page load
if (!this.firebaseInitComplete) { return; }

// If this is a change after page load (getting initial firebase value) update it on firebase to enable 3-way binding
this.firebaseForm.update(values);
});
}

ngOnInit() {
this.firebaseForm = this.af.database.object("/currentComment");
// Listen to changes on server
this.firebaseForm.subscribe(data => {
this.firebaseInitComplete = true; // Mark first data retrieved from server
this.model = data;
});
}
}

上面的代码有效,当用户实时输入内容时,我能够读取初始 firebase 值并更新 firebase 上的值。

但是有一个手动逻辑来检查 this.firebaseInitComplete 并添加 ngAfterViewInit 来监听变化感觉有点不对劲,我只是让它工作。

有没有更好的组件内部逻辑更少的三向绑定(bind)实现?

最佳答案

七个月后,我有一个答案给你……扩展的 ngModel 语法……

<input [ngModel]='(model|async)?.author' (ngModelChange)="model.update({author: $event})">

[] block 是一个 getter,() block 是一个 setter。由于模型的 getter 实际上是在解包 FirebaseObjectObservable,因此您必须使用 FirebaseObjectObservable 的绑定(bind)来设置它。

关于angular - Angular 2 和 Angularfire2 中的三种方式绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38521471/

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