使用 typescript 的 Nuxtjs 在使用 meta 时有问题
Nuxtjs using typescript has problem with using meta
在 Nuxtjs 中,我放置了页面的 permissionKeys,以便我可以在中间件中检查用户的访问权限。当我的脚本语言是 js 时,一切都很顺利,但是,在 lagn="ts" 的情况下,我会遇到错误。
我一直在寻找解决方案并使用 vue-meta 包,但我最终遇到了同样的错误。
<script lang="ts">
export default {
meta: {
authorization: ['Organization/List']
},
data() {
return {
text: this.$t('organization.title'),
}
}
}
在这种情况下,我遇到了这个错误:"Property '$t' does not exist on type '{ meta: { authorization: string[]; }; data(): any; }'."
我不知道使用元变量和全局变量有什么问题。
通过使用 <type="ts">
,我们正在调用 TypeScript 类型检查。
现在让我们分解代码,看看为什么错误是合法的。
const obj = {
meta: {
authorization: ['Organization/List']
},
data() {
return {
text: this.$t('organization.title'),
}
}
};
export default obj;
现在,在data
方法中,this
引用对象obj
,我们引用this
的属性 $t
,共 obj
个。明明没有属性.
你可以通过使用 nuxt-属性-装饰器来实现
这指的是头部 属性 我不确定这是否适合你对插件 vue-meta 的需求,但你可以参考下面给出的 link 关于创建装饰器来设置 vue-meta 包
<script lang="ts">
import { Component, Vue } from 'nuxt-property-decorator';
@Component({
layout: 'home',
head() {
return {
title: 'Test Title',
meta: [
{ hid: 'description', name: 'description', content: 'My custom description' }
]
}
}
})
export default class MainPage extends Vue {
}
</script>
或创建您自己的装饰器,以便您可以在 class
中定义它
@Meta
https://github.com/nuxt/vue-meta/issues/181#issuecomment-390258209
@2019 年 1 月 9 日更新
您可以使用 extendRoutes,这是不可取的,但仍然有效:)
创建 permissions.js 并在其中看起来像这样
export const normalUser = [
'route-name-invoices',
'route-name-invoices-create'
];
在你的 nuxt.config.js - 导入你的权限 js
import { normalUser } from './permissions'
...
// find the router or you can define it
router: {
extendRoutes(routes) {
return routes.map(route => {
if (normalUser.includes(route.name)) {
route.meta = { authorization: ['Organization/list'] };
}
return route;
});
}
}
最近好像在route中添加了meta key的定义:
https://github.com/nuxt/typescript/pull/89
在 Nuxtjs 中,我放置了页面的 permissionKeys,以便我可以在中间件中检查用户的访问权限。当我的脚本语言是 js 时,一切都很顺利,但是,在 lagn="ts" 的情况下,我会遇到错误。
我一直在寻找解决方案并使用 vue-meta 包,但我最终遇到了同样的错误。
<script lang="ts">
export default {
meta: {
authorization: ['Organization/List']
},
data() {
return {
text: this.$t('organization.title'),
}
}
}
在这种情况下,我遇到了这个错误:"Property '$t' does not exist on type '{ meta: { authorization: string[]; }; data(): any; }'."
我不知道使用元变量和全局变量有什么问题。
通过使用 <type="ts">
,我们正在调用 TypeScript 类型检查。
现在让我们分解代码,看看为什么错误是合法的。
const obj = {
meta: {
authorization: ['Organization/List']
},
data() {
return {
text: this.$t('organization.title'),
}
}
};
export default obj;
现在,在data
方法中,this
引用对象obj
,我们引用this
的属性 $t
,共 obj
个。明明没有属性.
你可以通过使用 nuxt-属性-装饰器来实现 这指的是头部 属性 我不确定这是否适合你对插件 vue-meta 的需求,但你可以参考下面给出的 link 关于创建装饰器来设置 vue-meta 包
<script lang="ts">
import { Component, Vue } from 'nuxt-property-decorator';
@Component({
layout: 'home',
head() {
return {
title: 'Test Title',
meta: [
{ hid: 'description', name: 'description', content: 'My custom description' }
]
}
}
})
export default class MainPage extends Vue {
}
</script>
或创建您自己的装饰器,以便您可以在 class
中定义它@Meta
https://github.com/nuxt/vue-meta/issues/181#issuecomment-390258209
@2019 年 1 月 9 日更新
您可以使用 extendRoutes,这是不可取的,但仍然有效:)
创建 permissions.js 并在其中看起来像这样
export const normalUser = [
'route-name-invoices',
'route-name-invoices-create'
];
在你的 nuxt.config.js - 导入你的权限 js
import { normalUser } from './permissions'
...
// find the router or you can define it
router: {
extendRoutes(routes) {
return routes.map(route => {
if (normalUser.includes(route.name)) {
route.meta = { authorization: ['Organization/list'] };
}
return route;
});
}
}
最近好像在route中添加了meta key的定义: https://github.com/nuxt/typescript/pull/89