В вашем коде есть три проблемы.
Первая проблема: вызов функции в прослушивателе событий
вы вызываете deltion (возможно, вы имеете в виду удаление: P), когда вы регистрируете прослушиватель событий.
remov.addEventListener("click", this.deltion());
правильная форма:
remov.addEventListener("click", this.deltion);
Поскольку вы хотите передать тело функции прослушивателю событий, а не результат функции. (вы можете заключить функцию в стрелочную функцию, если хотите ее вызвать, но в конце будет то же самое).
Вторая проблема: это не это
Если исправишь первую, найдешь другую (жизнь программистов). this - специальное ключевое слово в js, контекст this будет меняться в зависимости от вызывающего.
- showinfo is ключевое слово this относится к экземпляру компонента.
- db.collection ("Studnets"). get (). then (function (querySnapshot) {}) вызывается обещание, и при разрешении он вызовет функцию с параметром querySnapshot.
**this**
контекст ключевого слова изменяется. - вы повторяете коллекцию с помощью foreach querySnapshot.forEach (function (do c) {})
**this**
контекст ключевого слова снова изменяется.
Решением будет использование стрелочных функций, чтобы они не были связаны с родительской функцией.
db.collection("Studnets").get().then(querySnapshot => {
querySnapshot.data.forEach(doc => {
// code
})
})
Если по какой-то причине вы не можете использовать стрелочные функции, вы можете добавить переменную, которая " shadows "контекст ключевого слова this
в функции showinfo.
showinfo() {
const vm = this;
api.getStudentsCollection().then(function(querySnapshot) {
querySnapshot.data.forEach(function(doc) {
// setup code
remov.addEventListener("click", vm.deltion);
// setup code
});
});
}
Третья проблема: нажатие на изображение стрелки приведет к удалению кнопки, но не tr. Используйте currentTarget вместо target, target - это элемент, на который нажимает пользователь, это может быть любой элемент внутри кнопки, например изображение, currentTarget - это элемент, к которому прикреплен прослушиватель событий, известный как кнопка.
{
deltion: function(e) {
const rawStudent = e.currentTarget;
const raw = rawStudent.parentElement;
console.log(raw);
raw.remove();
}
}
Unsolicited Совет
Vue отличается простотой и декларативным кодом. Вы можете решить проблему так же, как и исходный код, но есть более простой способ , чтобы позволить компоненту управлять своим состоянием .
Я реплицировал ваш код с исправленной исходной версией и простейшим vue способ (с простым переключением пустого состояния и состояния загрузки). Надеюсь, вы найдете это полезным и извлечете уроки из этого. :) https://codesandbox.io/s/student-list-ammar-yasir-b5sxo?file= / src / App. vue
Учебные ссылки