账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue的tags组件router-link标签跳转已打开页面不重新加载数据,有什么好方法吗?
    94
    0

    现在就是打开A页面和B页面,然后在B页面修改完数据,A页面也需响应,这时点击TAGS上的A页面标签过去时,A页面是不会重新加载数据的。目前可以在A页面用activate写created的方法解决,但是问题是页面非常多,每个页面添加的话会非常耗时以及代码整洁度差,所以请问是否有什么方法改一个地方就好的?

    tags代码也放下吧
    <template>

    <div class="tags" v-if="showTags">
        <ul>
            <li class="tags-li" v-for="(item,index) in tagsList" :class="{'active': isActive(item.path)}" :key="index">
                <router-link :to="item.path" class="tags-li-title">
                    {{item.title}}
                </router-link>
                <span class="tags-li-icon" @click="closeTags(index)"><i class="el-icon-close"></i></span>
            </li>
        </ul>
        <div class="tags-close-box">
            <el-dropdown @command="handleTags">
                <el-button size="mini" type="primary">
                    标签选项<i class="el-icon-arrow-down el-icon--right"></i>
                </el-button>
                <el-dropdown-menu size="small" slot="dropdown">
                    <el-dropdown-item command="other">关闭其他</el-dropdown-item>
                    <el-dropdown-item command="all">关闭所有</el-dropdown-item>
                </el-dropdown-menu>
            </el-dropdown>
        </div>
    </div>

    </template>

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 無敵-女汉子° 普通会员 1楼

      在Vue中,如果你想要在跳转已打开页面时不会重新加载数据,你可以使用propscontext来传递路由状态到router-link标签。以下是一些方法:

      1. 使用props传递路由状态:

      ```javascript Click me

      export default { data() { return { isOpen: false, }; }, watch: { isOpen(newValue) { this.$emit('update:isOpen', newValue); }, }, methods: { open() { this.isOpen = true; }, }, }; ```

      在这个例子中,open方法会在watch钩子中被调用,当isOpen属性更新时,它会触发update:isOpen事件,然后在methods部分,你可以在open方法中更新isOpen属性,使router-link标签显示或隐藏。

      1. 使用context传递路由状态:

      ```javascript Click me

      export default { context: { route: { data() { return { isOpen: false, }; }, }, }, watch: { isOpen(newValue) { this.$emit('update:isOpen', newValue); }, }, methods: { open() { this.isOpen = true; }, }, }; ```

      在这个例子中,route属性是一个包含路由数据的对象,它包含了路由的data属性,你可以使用data属性来获取路由的状态。在watch钩子中,你可以在open方法中获取到route属性的值,然后更新isOpen属性,使router-link标签显示或隐藏。

      注意:在使用context传递路由状态时,你需要确保你使用的是Vue Router提供的createupdate钩子来更新route对象的属性。例如:

      ```javascript const router = new VueRouter({ routes: [ { path: '/your-page', component: YourComponent, // 其他组件 data() { return { isOpen: false, }; }, methods: { open() { this.isOpen = true; }, }, }, ], create() { return new VueRouter({ routes: [ { path: '/your-page', component: YourComponent, // 其他组件 data() { return { isOpen: false, }; }, methods: { open() { this.isOpen = true; }, }, }, ], }); }, update() { this.$router.push({ path: '/your-page', query: { ... }, }); }, });

      new Vue({ router, // 其他配置 }); ```

      在这个例子中,createupdate钩子会创建一个新的Vue Router实例,并且在create钩子中创建一个新的路由实例,使用push方法将路由的URL传递给新的路由实例。在update钩子中,Vue Router会使用push方法将新的路由实例的URL传递给当前的路由实例。这样,当你在router-link标签中使用to属性时,Vue Router会自动更新路由状态,并在跳转到新的页面时不会重新加载数据。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部