如何将数据从被动表单推送到firestore?

时间:2018-01-04 06:29:57

标签: angular angular-reactive-forms

如何将数据从被动表单推送到firestore?我现在创建了反应形式,我只需要将信息推送到集合中。表格中的文件提交。如何用Angular 5实现这一目标?我写了反应形式,最后一部分是将数据推送到firebase。

这是当前的代码:         从'@ angular / core'导入{Component,OnInit,OnDestroy};         从'angularfire2 / firestore'导入{AngularFirestore,AngularFirestoreCollection};         从'angularfire2 / database'导入{AngularFireDatabase};         从'angularfire2 / auth'导入{AngularFireAuth};         从'rxjs / Observable'中导入{Observable};

    import { FirestoreService } from '../../../../providers/firestore.service';

    import { Subject } from 'rxjs/Subject';
    import 'rxjs/add/operator/switchMap';
    import 'rxjs/add/observable/combineLatest';
    import * as firebase from 'firebase/app';

    import { ActivatedRoute } from '@angular/router';

    import { FormGroup, FormControl, Validators } from '@angular/forms';

    export interface Item {
    productName: '';
    productTitle: '';
    productPrice: '';
    productDescription: '';
    }

    @Component({
    selector: 'app-form',
    templateUrl: './form.component.html',
    styleUrls: ['./form.component.scss']
    })
    export class FormComponent implements OnInit {

    productId: any;
    prodId: string;
    ref: AngularFirestoreCollection<Item>;
    items: Observable<Item[]>;

    // for the form
    Item: FormGroup;
    FormGroup = this.db.col$('items');
    // end for the form

    private routeSubscribed: any;


    constructor(
        private route: ActivatedRoute,
        public db: FirestoreService,
        private afs: AngularFirestore
    ) { }

    ngOnInit() {
        this.ref = this.afs.collection('items');
        this.items = this.ref.valueChanges();
        this.items = this.db.col$('items');
        this.items = this.db.colWithIds$('items');
        this.productId = this.db.doc$(`items/${this.prodId}`);


        /// here is the form for products
        const data: Item = new Item ({
        productName: new FormControl('', {
            validators: Validators.required
        }),
        productTitle: new FormControl('', {
            validators: Validators.required
        }),
        productPrice: new FormControl('', {
            validators: Validators.required
        }),
        productDescription: new FormControl('', {
            validators: Validators.required
        })
        }, { updateOn: 'submit' } );
        // end here is the form for products
        this.afs.doc(`items/tops`).set(data);
        this.db.set(`items/tops`, data);

        }
        }

1 个答案:

答案 0 :(得分:0)

这就是我接近它的方式: 我假设您已完成所有设置以使用angularfire2

  1. 创建服务(items.service.ts)并建立连接和请求: (使用界面定义Item或创建模型文件,我更喜欢模型文件)

    itemsCollection: AngularFirestoreCollection<Item>;
    items: Observable<Item>;
    collectionPath: string = "YOUR_PATH";
    
    constructor(private afs: AngularFirestore) {
        this.itemsCollection = this.afs.collection(this.collectionPath);
    }
    
    addItem(item: Item){
        this.itemsCollection.add(item);
    }
    
  2. 使用items.component.ts文件生成表单并推送数据:

    item: Item;
    itemForm: FormGroup;
    
    constructor(private itemsService: ItemsService) { }
    
    ngOnInit(){
        this.initForm()
    }
    
    private initForm(){
        this.itemForm = new FormGroup({
            'name' : new FormControl('', Validators.required),
            'title': new FormControl('', Validators.required)
            ......
        });
    }
    
    onSubmit(){
       this.itemService.addItem(this.itemForm.value);
    }
    
  3. 在你的html文件中:

    <form [formGroup]="itemForm"
          (ngSubmit)="onSubmit()">
    

    并在您的输入中分配formControlName 并添加一个类型为&#34的提交按钮;提交&#34;

  4. 我希望它有所帮助。这是我第一次使用它,所以我道歉现在以更好的方式格式化答案。