+
95
-

回答

在Vue中,要获取指定router name的完整URL地址,你可以使用Vue Router提供的方法。以下是几种实现方式:

使用 $router.resolve() 方法:
export default {
  methods: {
    getFullPath(routeName, params = {}, query = {}) {
      const route = this.$router.resolve({
        name: routeName,
        params: params,
        query: query
      });
      return window.location.origin + route.href;
    }
  }
}

使用示例:

const fullUrl = this.getFullPath('user', { id: 123 }, { tab: 'profile' });
console.log(fullUrl);
// 输出类似:https://example.com/user/123?tab=profile
使用 $router.resolve() 和 URL 对象:
export default {
  methods: {
    getFullUrl(routeName, params = {}, query = {}) {
      const route = this.$router.resolve({
        name: routeName,
        params: params,
        query: query
      });
      return new URL(route.href, window.location.origin).href;
    }
  }
}
在Vue 3和Vue Router 4中,你可以使用 useRouter 组合式API:
import { useRouter } from 'vue-router';

export default {
  setup() {
    const router = useRouter();

    const getFullUrl = (routeName, params = {}, query = {}) => {
      const route = router.resolve({
        name: routeName,
        params: params,
        query: query
      });
      return new URL(route.href, window.location.origin).href;
    };

    return { getFullUrl };
  }
}

注意事项:

确保你的路由配置中正确设置了 name 属性。

params 和 query 是可选的,取决于你的路由配置和需求。

这些方法返回的是绝对URL。如果你只需要相对路径,可以去掉 window.location.origin。

在服务器端渲染(SSR)环境中,window.location.origin 可能不可用,你需要提供一个基础URL。

对于包含动态段的路由,确保在调用时提供所有必要的参数。

使用这些方法,你可以在Vue应用中方便地获取任何命名路由的完整URL地址。这在需要生成链接、分享URL或进行重定向时特别有用。

网友回复

我知道答案,我要回答