Vue.js $remove 从数据库中删除后不删除元素
Vue.js $remove not removing element after deleted from database
我正在使用 Laravel 并尝试学习 Vue.js。我有一个正常工作的删除请求,并从数据库中删除了对象。问题是成功删除后它没有从 DOM 中删除。我正在使用 $remove
方法并将完整的对象传递给它,所以我知道我遗漏了一些东西。
作为旁注,我将 main.js
作为入口点,将 PersonTable.vue
作为组件。 PersonTable.vue
包含该模板的模板和脚本。
这是我的 Laravel 观点:
<div id="app">
<person-table list="{{ $persons }}">
</person-table>
</div>
这是我的`PersonTable.vue:
<template id="persons-template">
<div class="container">
<div class="row">
<div class="col-sm-12">
<h1>Persons List</h1>
<table class="table table-hover table-striped">
<thead>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Email</td>
<td>Gender</td>
</tr>
</thead>
<tbody>
<tr v-for="person in list">
<td>{{person.first_name }}</td>
<td>{{person.last_name }}</td>
<td>{{person.email }}</td>
<td>{{person.gender }}</td>
<td><span @click="deletePerson(person)">X</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</template>
<script>
export default {
template: '#persons-template',
props: ['list'],
methods: {
deletePerson: function(person) {
this.$http.delete('/person/' + person.id).then(
function(response) {
this.persons.$remove(person);
}
);
}
},
created: function() {
this.persons = JSON.parse(this.list);
}
};
</script>
我的 main.js
入口点:
var Vue = require('vue');
Vue.use(require('vue-resource'));
var Token = document.querySelector('meta[name="_token"]').getAttribute('content');
Vue.http.headers.common['X-CSRF-TOKEN'] = Token;
import PersonTable from './components/PersonTable.vue';
new Vue({
el: '#app',
components: { PersonTable },
})
我认为您需要将 this
绑定到响应函数:
function(response) {
this.persons.$remove(person);
}.bind(this)
这样当你这样做时 this.persons
你仍然指的是 Vue 组件
编辑:可以尝试 -
props:['personJson'],
data:function(){
return {
persons:[]
}
},
ready:function(){
this.persons = JSON.parse(this.personJson)
}
想想也许因为 persons
最初是一个字符串,Vue 没有正确绑定响应功能?
我认为您需要在创建的方法中使用 this.$set
,否则,恐怕 Vue 会失去反应性。
在您的 created
方法中,您能否尝试以下操作:
export default {
template: '#persons-template',
props: ['persons'],
methods: {
deletePerson: function(person) {
var self = this;
this.$http.delete('/person/' + person).then(
function(response) {
self.persons.$remove(person);
}
);
}
},
created: function() {
this.$set('persons',JSON.parse(this.persons));
}
};
终于想通了。我需要将 JSON 数据传递给我的 data
属性 组件。这是代码。
在 blade 文件中:
<div id="app">
<person-table list="{{ $persons }}">
</person-table>
</div>
在我的 PersonTable.vue 文件中:
<template id="persons-template">
<div class="container">
<div class="row">
<div class="col-sm-12">
<h1>Persons List</h1>
<table class="table table-hover table-striped">
<thead>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Email</td>
<td>Gender</td>
</tr>
</thead>
<tbody>
// Notice how I am using persons here instead of list
<tr v-for="person in persons">
<td>{{person.first_name }}</td>
<td>{{person.last_name }}</td>
<td>{{person.email }}</td>
<td>{{person.gender }}</td>
<td><span class="delete person" @click="deletePerson(person)"><i class="fa fa-close"></i></span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</template>
<script>
export default {
template: '#persons-template',
props: ['list'],
data: function() {
return {
persons: []
}
},
methods: {
deletePerson: function(person) {
this.$http.delete('/person/' + person.id).then(
function(response) {
this.persons.$remove(person);
}
);
},
},
created: function() {
// Pushing the data to the data property so it's reactive
this.persons = JSON.parse(this.list);
},
};
</script>
感谢大家的贡献。由于修复此错误需要多长时间,我几乎放弃了 Vue。
我正在使用 Laravel 并尝试学习 Vue.js。我有一个正常工作的删除请求,并从数据库中删除了对象。问题是成功删除后它没有从 DOM 中删除。我正在使用 $remove
方法并将完整的对象传递给它,所以我知道我遗漏了一些东西。
作为旁注,我将 main.js
作为入口点,将 PersonTable.vue
作为组件。 PersonTable.vue
包含该模板的模板和脚本。
这是我的 Laravel 观点:
<div id="app">
<person-table list="{{ $persons }}">
</person-table>
</div>
这是我的`PersonTable.vue:
<template id="persons-template">
<div class="container">
<div class="row">
<div class="col-sm-12">
<h1>Persons List</h1>
<table class="table table-hover table-striped">
<thead>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Email</td>
<td>Gender</td>
</tr>
</thead>
<tbody>
<tr v-for="person in list">
<td>{{person.first_name }}</td>
<td>{{person.last_name }}</td>
<td>{{person.email }}</td>
<td>{{person.gender }}</td>
<td><span @click="deletePerson(person)">X</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</template>
<script>
export default {
template: '#persons-template',
props: ['list'],
methods: {
deletePerson: function(person) {
this.$http.delete('/person/' + person.id).then(
function(response) {
this.persons.$remove(person);
}
);
}
},
created: function() {
this.persons = JSON.parse(this.list);
}
};
</script>
我的 main.js
入口点:
var Vue = require('vue');
Vue.use(require('vue-resource'));
var Token = document.querySelector('meta[name="_token"]').getAttribute('content');
Vue.http.headers.common['X-CSRF-TOKEN'] = Token;
import PersonTable from './components/PersonTable.vue';
new Vue({
el: '#app',
components: { PersonTable },
})
我认为您需要将 this
绑定到响应函数:
function(response) {
this.persons.$remove(person);
}.bind(this)
这样当你这样做时 this.persons
你仍然指的是 Vue 组件
编辑:可以尝试 -
props:['personJson'],
data:function(){
return {
persons:[]
}
},
ready:function(){
this.persons = JSON.parse(this.personJson)
}
想想也许因为 persons
最初是一个字符串,Vue 没有正确绑定响应功能?
我认为您需要在创建的方法中使用 this.$set
,否则,恐怕 Vue 会失去反应性。
在您的 created
方法中,您能否尝试以下操作:
export default {
template: '#persons-template',
props: ['persons'],
methods: {
deletePerson: function(person) {
var self = this;
this.$http.delete('/person/' + person).then(
function(response) {
self.persons.$remove(person);
}
);
}
},
created: function() {
this.$set('persons',JSON.parse(this.persons));
}
};
终于想通了。我需要将 JSON 数据传递给我的 data
属性 组件。这是代码。
在 blade 文件中:
<div id="app">
<person-table list="{{ $persons }}">
</person-table>
</div>
在我的 PersonTable.vue 文件中:
<template id="persons-template">
<div class="container">
<div class="row">
<div class="col-sm-12">
<h1>Persons List</h1>
<table class="table table-hover table-striped">
<thead>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Email</td>
<td>Gender</td>
</tr>
</thead>
<tbody>
// Notice how I am using persons here instead of list
<tr v-for="person in persons">
<td>{{person.first_name }}</td>
<td>{{person.last_name }}</td>
<td>{{person.email }}</td>
<td>{{person.gender }}</td>
<td><span class="delete person" @click="deletePerson(person)"><i class="fa fa-close"></i></span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</template>
<script>
export default {
template: '#persons-template',
props: ['list'],
data: function() {
return {
persons: []
}
},
methods: {
deletePerson: function(person) {
this.$http.delete('/person/' + person.id).then(
function(response) {
this.persons.$remove(person);
}
);
},
},
created: function() {
// Pushing the data to the data property so it's reactive
this.persons = JSON.parse(this.list);
},
};
</script>
感谢大家的贡献。由于修复此错误需要多长时间,我几乎放弃了 Vue。