免责声明:我对Angular和RXJS都是新手。
我有一个简单的表单,试图从中创建一个可观察的表单。这将查找submit
事件,并更新组件中的某些值。但是,我遇到了this._subscribe is not a function
错误。
<form (submit)='submitForm()'>
<button type='submit'>Submit</button>
</form>
我的组件
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import UtilsHelperService from '../services/utils-helper.service';
@Component({...stuffs...})
export class HomeComponent implements OnInit {
formSubmit: Observable<any>;
counter = 0;
constructor() { }
ngOnInit() {
const form = document.getElementsByTagName('form')[0];
this.formSubmit = Observable.create(form, 'submit');
}
submitForm() {
this.formSubmit.subscribe(
UtilsHelperService.formSubmitObserver(this.counter));
}
}
还有我的utils-helper.service.ts
助手类...
import {Injectable} from '@angular/core';
@Injectable({
providedIn: 'root'
})
export default class UtilsHelperService {
static formSubmitObserver(counter) {
return {
next: (value) => {
counter++;
},
error: err => console.log(err),
complete: () => console.log('complete')
}
}
}
formSubmit
观察者的创建很好。 UtilsHelperService.formSubmitObserver
方法,它返回带有三个必要方法的observer
对象。所以,我不确定是我做错的Angular东西(我想不是)还是RXjs的东西。谢谢您的阅读:)
答案 0 :(得分:1)
看看FormGroup。您可以订阅其“ valueChanges”属性。
FormGroup formGroup;
// populate your formGroup (https://angular.io/guide/reactive-forms#step-1-creating-a-formgroup-instance)
formGroup.valueChanges.subscribe(// do whatever you want);
答案 1 :(得分:0)
我做了两件事来解决这个问题:
使用fromEvent
代替Observable.create
从submit
事件创建可观察事件。这样,订阅不会引发错误(正在调查原因..)
由于服务是单例,因此无法从服务更新组件属性。您必须使用eventemitter或使用AngularJS样式点规则。对于这种情况,我在组件本身中添加了所有辅助逻辑。
ngOnInit() {
const form = document.getElementsByTagName('form')[0];
this.formSubmit = fromEvent(form, 'submit');
this.formSubmit.subscribe((submitEvent) => {
this.counter++;
this.formSubmitted.emit(this.counter);
})
}
这样,我可以从组件和模板中删除submitForm
方法,并从服务中删除助手方法。