道具异步时 Vue 组件未更新
Vue component not updated when props are async
我有这个组件
<template>
<div class="list-group">
<div v-for="user in data">
<!-- omitted for brevity -->
</div>
</div>
</template>
<script>
export default ("users-list", {
props: ['users']
,
data() {
return {
data: this.users
}
}
});
</script>
此组件从另一个组件使用 使用 $.ajax (Promise) 获取数据并设置数据
<template>
<div>
<users-list v-bind:users="users"></users-list>
<div>
</template>
<script>
import UsersService from './users.service.js';
import UsersList from './users.list.vue';
export default ('users-main', {
components: {
'users-list': UsersList
},
mounted() {
this.refresh();
},
data() {
return {
data: null,
message: null,
user: null
}
},
methods: {
refresh() {
let service = new UsersService();
service.getAll()
.then((data) => {
this.data = data;
})
.catch((error) => {
this.message = error;
})
},
selected(user) {
this.user = user;
}
}
});
</script>
这是用户服务
import $ from 'jquery';
export default class UsersService {
getAll() {
var url = "/Api/Users/2017";
return new Promise((resolve, reject) => {
$.ajax({
url: url,
success(data) {
resolve(data);
},
error(jq, status, error){
reject(error);
}
});
});
}
}
如您所见,服务使用 Promise
获取数据,如果我更改
<div v-for="user in data">
进入属性,可以看到用户
<div v-for="user in users">
问题:如何将异步属性值传递给组件?
你是什么意思:
如您所见,服务通过 Promise 获取数据,如果我更改
<div v-for="user in data">
进入属性,可以看到用户
<div v-for="user in users">
使用<div v-for="user in users">
应该可以,请问有什么问题吗?
您在用户列表中设置了一次数据"onInit"。
对于反应性,你可以做
computed:{
data(){ return this.users;}
}
或
watch: {
users(){
//do something
}
}
我有这个组件
<template>
<div class="list-group">
<div v-for="user in data">
<!-- omitted for brevity -->
</div>
</div>
</template>
<script>
export default ("users-list", {
props: ['users']
,
data() {
return {
data: this.users
}
}
});
</script>
此组件从另一个组件使用 使用 $.ajax (Promise) 获取数据并设置数据
<template>
<div>
<users-list v-bind:users="users"></users-list>
<div>
</template>
<script>
import UsersService from './users.service.js';
import UsersList from './users.list.vue';
export default ('users-main', {
components: {
'users-list': UsersList
},
mounted() {
this.refresh();
},
data() {
return {
data: null,
message: null,
user: null
}
},
methods: {
refresh() {
let service = new UsersService();
service.getAll()
.then((data) => {
this.data = data;
})
.catch((error) => {
this.message = error;
})
},
selected(user) {
this.user = user;
}
}
});
</script>
这是用户服务
import $ from 'jquery';
export default class UsersService {
getAll() {
var url = "/Api/Users/2017";
return new Promise((resolve, reject) => {
$.ajax({
url: url,
success(data) {
resolve(data);
},
error(jq, status, error){
reject(error);
}
});
});
}
}
如您所见,服务使用 Promise
获取数据,如果我更改
<div v-for="user in data">
进入属性,可以看到用户
<div v-for="user in users">
问题:如何将异步属性值传递给组件?
你是什么意思:
如您所见,服务通过 Promise 获取数据,如果我更改
<div v-for="user in data">
进入属性,可以看到用户
<div v-for="user in users">
使用<div v-for="user in users">
应该可以,请问有什么问题吗?
您在用户列表中设置了一次数据"onInit"。 对于反应性,你可以做
computed:{
data(){ return this.users;}
}
或
watch: {
users(){
//do something
}
}