我如何在路线更改时显示来自数据库的数据?
How do i display data from db on a route change?
我正在 vue.js + firebase 中开发类似 Messenger 的应用程序。我想做的是——在每次路由更改时,从数据库中获取一些与 id(存储在路由中)对应的数据,然后将其显示在屏幕上。我在处理这些数据时遇到了一些奇怪的行为,而且它没有按预期工作。
代码:
methods: {
getRoomName() {
db.collection("rooms")
.doc(this.params)
.onSnapshot((snapshot) => (this.roomName = snapshot.data().name));
},
},
watch: {
$route(to, from) {
this.getRoomName();
},
},
其中数据:
data() {
return {
input: "",
roomName: "",
params: this.$route.params.id,
message: "",
roomNameTest: "",
};
},
模板:<span class="roomName">{{roomName}}</span>
我注意到的第一件事是您在 data() 中调用 this.$route,它不起作用。如果您需要填充某些内容,请尝试使用 Vue Lifecycle Hooks.
生命周期钩子(mounted/created就是针对这些东西的,分别在vue实例创建和挂载时调用。
mounted() // it can also work for the created hook {
this.getRoomName();
},
watcher 监视路由变化,但并不真正适合这种情况,因为在路由发生变化时,它正在监视的组件尚未实例化。当您正在观看的特定 Vue 实例分别为 instantiated/mounted 时,将触发 mounted/created 挂钩。
如果 url 上的参数发生变化并且您需要做一些事情,则使用观察器进行路由更改的合适时间。一个例子是改变 /users/1 to
/users/2`。这将起作用,因为使用了相同的组件,观察者将检测到变化。
我正在使用 $route.path
来观察变化以获取新 ID。
组件
computed: {
...mapState('products', ['products']),
},
watch: {
'$route.path'() {
this.bindProducts(this.IdFromUrl)
},
},
mounted() {
this.bindProducts(this.IdFromUrl)
},
methods: {
...mapActions('products', ['bindProducts']),
}
我店里的 运行 vuexfire 正在运行。
或者,您可以绑定自己的数据。
我正在 vue.js + firebase 中开发类似 Messenger 的应用程序。我想做的是——在每次路由更改时,从数据库中获取一些与 id(存储在路由中)对应的数据,然后将其显示在屏幕上。我在处理这些数据时遇到了一些奇怪的行为,而且它没有按预期工作。
代码:
methods: {
getRoomName() {
db.collection("rooms")
.doc(this.params)
.onSnapshot((snapshot) => (this.roomName = snapshot.data().name));
},
},
watch: {
$route(to, from) {
this.getRoomName();
},
},
其中数据:
data() {
return {
input: "",
roomName: "",
params: this.$route.params.id,
message: "",
roomNameTest: "",
};
},
模板:<span class="roomName">{{roomName}}</span>
我注意到的第一件事是您在 data() 中调用 this.$route,它不起作用。如果您需要填充某些内容,请尝试使用 Vue Lifecycle Hooks.
生命周期钩子(mounted/created就是针对这些东西的,分别在vue实例创建和挂载时调用。
mounted() // it can also work for the created hook {
this.getRoomName();
},
watcher 监视路由变化,但并不真正适合这种情况,因为在路由发生变化时,它正在监视的组件尚未实例化。当您正在观看的特定 Vue 实例分别为 instantiated/mounted 时,将触发 mounted/created 挂钩。
如果 url 上的参数发生变化并且您需要做一些事情,则使用观察器进行路由更改的合适时间。一个例子是改变 /users/1 to
/users/2`。这将起作用,因为使用了相同的组件,观察者将检测到变化。
我正在使用 $route.path
来观察变化以获取新 ID。
组件
computed: {
...mapState('products', ['products']),
},
watch: {
'$route.path'() {
this.bindProducts(this.IdFromUrl)
},
},
mounted() {
this.bindProducts(this.IdFromUrl)
},
methods: {
...mapActions('products', ['bindProducts']),
}
我店里的 运行 vuexfire 正在运行。 或者,您可以绑定自己的数据。