gpt4 book ai didi

javascript - Vue.js:在 vue.router 路由中使用 mixin 函数

转载 作者:搜寻专家 更新时间:2023-10-30 22:16:37 26 4
gpt4 key购买 nike

我想为每个路由动态设置窗口的标题,所以在每个routes: []子对象我有一个 meta: { title: ... }目的。例如:

routes: [
{
path: 'profile/:id',
name: 'Profile',
component: Profile,
meta: {
title: function (to, cb) {
const profileId = parseInt(to.params.id);
// ... do stuff ...
}
}
}
]

我在 afterEach 中调用这个标题函数钩子(Hook):

router.afterEach((to) => {
document.title = 'My Site';
if (to.meta && to.meta.title) {
to.meta.title(router.app, to, (result) => { document.title += ' | ' + result; });
}
});

... do stuff ...我想从我的 mixin 中调用一个方法的部分 GetAndStore.js称为 loadProfile(profileId) .我添加了 GetAndStore进入路由器的mixins,但是loadProfile不可用(this.loadProfile 未定义)。我加载了 GetAndStore全局并再次尝试,结果相同。在过去的一个小时里,我尝试了所有我能想到的配置,但我根本没有找到任何方法来访问 GetAndStore 中的方法。从此设置中。

关于我遗漏了什么或我需要重组什么以便从 routes->element->meta->title 中访问 mixin 方法的任何想法?

最佳答案

问题是...

Mixins are a flexible way to distribute reusable functionalities for Vue components

Vue-router 不是组件,您也无权访问为路由加载的组件。

我的建议是将 loadProfile 从您的 GetAndStore 混合中命名为导出。假设你的 mixin 被导出为

import axios from 'axios' // just an example

export default {
methods: {
loadProfile (profileId) {
return axios.get(...)
}
}
}

您可以将您的函数移出默认导出并将其命名...

export function loadProfile (profileId) {
return axios.get(...)
}

export default {
methods: {
loadProfile
}
}

然后您可以在路由定义中只导入 loadProfile 函数...

import { loadProfile } from 'GetAndStore'

当然,你也可以直接导入你的mixin,然后直接使用

import GetAndStore from 'GetAndStore'

// snip

GetAndStore.methods.loadProfile(to.params.id).then(...)

关于javascript - Vue.js:在 vue.router 路由中使用 mixin 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54296153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com