Vue.js-在中更改路由后未从父组件中删除DOM元素
我在vue.js中遇到了一个一致的行为,并且找不到任何描述它的文档,我想知道的是这种行为是否符合预期 我正在使用vue.js 2.6.8、@vue/cli服务3.5.1和vue路由器3.0.1开发SPA 我的路线如下所示:Vue.js-在中更改路由后未从父组件中删除DOM元素,dom,vue.js,vue-router,vue-cli-3,Dom,Vue.js,Vue Router,Vue Cli 3,我在vue.js中遇到了一个一致的行为,并且找不到任何描述它的文档,我想知道的是这种行为是否符合预期 我正在使用vue.js 2.6.8、@vue/cli服务3.5.1和vue路由器3.0.1开发SPA 我的路线如下所示: { path: '/Users', name: 'Users', component: Users, meta: {requiresAuth: true}, children: [ { path:
{
path: '/Users',
name: 'Users',
component: Users,
meta: {requiresAuth: true},
children: [
{
path: 'New',
component: NewUserModal,
name: 'NewUserModal',
meta: {requiresAuth: true},
}
]
},
{
path: '/Users/:id',
component: User,
name: 'User',
meta: {requiresAuth: true}
}
<template>
<my-list-component>
<template #modal>
<router-view/>
</template>
</my-list-component>
</template>
<template>
<keep-alive>
<router-view/>
</keep-alive>
</template>
Users组件是一个用户列表,其中有一个路由器视图,用于呈现新的用户模式,如下所示:
{
path: '/Users',
name: 'Users',
component: Users,
meta: {requiresAuth: true},
children: [
{
path: 'New',
component: NewUserModal,
name: 'NewUserModal',
meta: {requiresAuth: true},
}
]
},
{
path: '/Users/:id',
component: User,
name: 'User',
meta: {requiresAuth: true}
}
<template>
<my-list-component>
<template #modal>
<router-view/>
</template>
</my-list-component>
</template>
<template>
<keep-alive>
<router-view/>
</keep-alive>
</template>
一切都很好。那么,这是vue的预期行为吗?我错过什么了吗?更重要的是,我可以在更改路由之前等待DOM删除吗
谢谢你的时间和帮助
编辑1
为了更好地理解,my app.vue有一个保持活动状态,因此所有直接子项(例如用户列表等)不会在每次激活时向服务器发送请求。App.vue的结构如下所示:
{
path: '/Users',
name: 'Users',
component: Users,
meta: {requiresAuth: true},
children: [
{
path: 'New',
component: NewUserModal,
name: 'NewUserModal',
meta: {requiresAuth: true},
}
]
},
{
path: '/Users/:id',
component: User,
name: 'User',
meta: {requiresAuth: true}
}
<template>
<my-list-component>
<template #modal>
<router-view/>
</template>
</my-list-component>
</template>
<template>
<keep-alive>
<router-view/>
</keep-alive>
</template>
通过这种方式,我首先将用户重定向到父组件,这样子组件的生命周期将完全执行,其DOM元素将被删除,然后用户将重定向到用户组件
到目前为止,100%的时间都在工作。因此,当您路由到
用户/:id
时,组件实例将被重用。
对于任何id
-根据文档
也许你能帮忙
e、 g:
更重要的是,我可以在更改路由之前等待DOM删除吗
因此,当您路由到
user/:id
时,组件实例将被重用。
对于任何id
-根据文档
也许你能帮忙
e、 g:
更重要的是,我可以在更改路由之前等待DOM删除吗
“但是,如果我回到用户组件”,您可以尝试更改为
。显然,组件User
是组件Users
的子级。您可以将它添加到其中并检查吗?@Phil所有路由更改都是通过push发生的,例如:this.$router.push({name:'User'})代码>@varit05我可能错了,但事实并非如此。组件用户是用户列表,组件用户是单个用户的详细信息。用户不是子路由,因为它不依赖于用户组件,它实际上是一个完全不同的页面。如果我将用户添加为用户的子路由,我将不得不处理用户列表,该列表不应显示。“但是,如果我返回到用户组件”,您可以尝试更改为
。显然,组件User
是组件Users
的子级。您可以将它添加到其中并检查吗?@Phil所有路由更改都是通过push发生的,例如:this.$router.push({name:'User'})代码>@varit05我可能错了,但事实并非如此。组件用户是用户列表,组件用户是单个用户的详细信息。用户不是子路由,因为它不依赖于用户组件,它实际上是一个完全不同的页面。如果我将用户添加为用户的子路径,我将不得不处理用户列表,这不应该显示。我尝试了这种方法,不幸的是,当导航到那里时,NewUserModal的DOM元素仍然显示在用户组件中。从2017年发现这一点,不确定这是否真的是您所体验到的:yeap,我们最终还是在同一个地方。这就是我得到治疗的原因。后来我更新了一种新方法,这样做:this.$router.push({name:'Users});等待此消息。$nextTick();这是.$router.push({name:'User'})
我尝试了这种方法,但不幸的是,当导航到那里时,NewUserModal的DOM元素仍然显示在Users组件中。从2017年发现了这一点,不确定这是否真的是您所体验到的:是的,我们最终还是在同一个地方。这就是我得到治疗的原因。后来我更新了一种新方法,这样做:this.$router.push({name:'Users});等待此消息。$nextTick();这是.$router.push({name:'User'})代码>