der*_*ain 8 javascript laravel vue.js vue-resource
我正在使用Laravel并尝试学习Vue.js. 我有一个正常工作的删除请求,并从数据库中删除该对象.问题是在成功删除后没有从DOM中删除它.我正在使用该$remove方法并将其传递给完整的对象,所以我知道我错过了一些东西.
作为旁注,我有一个main.js作为组件的入口点PersonTable.vue.在PersonTable.vue持有该模板的模板和脚本.
这是我的Laravel视图:
<div id="app">
<person-table list="{{ $persons }}">
</person-table>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我的`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>
Run Code Online (Sandbox Code Playgroud)
我的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 },
})
Run Code Online (Sandbox Code Playgroud)
我认为你需要绑定this到响应函数:
function(response) {
this.persons.$remove(person);
}.bind(this)
Run Code Online (Sandbox Code Playgroud)
这样,当你这样做时,this.persons你仍然指的是Vue组件
编辑:可以尝试 -
props:['personJson'],
data:function(){
return {
persons:[]
}
},
ready:function(){
this.persons = JSON.parse(this.personJson)
}
Run Code Online (Sandbox Code Playgroud)
思考可能因为persons最初是一个字符串,Vue没有正确绑定反应能力?
| 归档时间: |
|
| 查看次数: |
4048 次 |
| 最近记录: |