Uso la función updateDoc de fireStore. También uso VueJs como marco. Intento crear un documento anidado con la entrada del usuario (member_name) como nombre de campo. Sin embargo, sigo recibiendo el error "Palabra clave inesperada 'esto'. (42:20)". El problema es de esta sección.
this.member_name: { name: this.member_name, task: 0, task_status: 0, }¿Puedes ayudarme a resolverlo? A continuación se muestra el código completo
<template> <div class="container shadow m-3 col-12"> <div class="d-flex justify-content-center m-2"> <h1>Add Member</h1> </div> <label for="member_name">Member name</label> <input class="form-control m-1" type="text" id="member_name" v-model="member_name"/> <label for="member_email">Member Email</label> <input class="form-control m-1" type="email" id="member_email" v-model="member_email"/> <div class="d-flex justify-content-center"> <button @click.prevent="submit" class="btn btn-primary col-6 m-2">Submit</button> </div> </div> </template> <script> import firebaseApp from '@/firebase.js' import { getFirestore } from "firebase/firestore" import { doc, updateDoc} from "firebase/firestore" const db = getFirestore(firebaseApp); import { getAuth, onAuthStateChanged } from "firebase/auth"; export default { name: "AddMember", components: { }, data(){ return{ email:"", project_name:"", member_name:"", member_email:"", } }, mounted(){ const auth = getAuth(); onAuthStateChanged(auth, (user) => { if (user) { this.email = user.email console.log(this.email) } else { console.log("Sorry") } }); }, methods: { async submit() { alert("Add new member successfully!") this.project_name = this.$route.query.project_name const projectDoc = doc(db, "projects", this.project_name); await updateDoc(projectDoc, { member_list: { this.member_name: { name: this.member_name, task: 0, task_status: 0, } }, }); } }, } </script> <style> </style>Puede usar la notación [] para usar el valor de la variable como el nombre de la propiedad:
await updateDoc(projectDoc, { member_list: { [this.member_name]: { // 👈 name: this.member_name, task: 0, task_status: 0, } }, }); Aparte de eso: si desea agregar el miembro a la matriz de lista de miembros existente, member_list usar el operador array-union como se muestra en la documentación sobre la actualización de elementos en un campo de matriz .
Está intentando establecer un valor incorrecto para el documento. En este código:
await updateDoc(projectDoc, { member_list: { this.member_name: { name: this.member_name, task: 0, task_status: 0, } }, });la tercera línea debe declarar la estructura del objeto, pero está haciendo referencia a un valor, y eso está mal.
La forma correcta sería algo similar a esto:
await updateDoc(projectDoc, { member_list: { member_name: { // <- or use whatever you want to define this object name: this.member_name, task: 0, task_status: 0, } }, });