Storybook vue composition api,_router of undefined

Posted

技术标签:

【中文标题】Storybook vue composition api,_router of undefined【英文标题】:Storybook vue composition api, _router of undefined 【发布时间】:2021-01-08 17:17:41 【问题描述】:

我尝试使用 vue-composition-api 渲染带有故事书 (vue-cli conf) 的组件,但出现以下错误:

Error: Cannot read property '_router' of undefined

file.stories.ts 的代码如下,

import Vue from 'vue'
import CompositionApi from '@vue/composition-api'
import VueRouter from 'vue-router'

import  storiesOf  from '@storybook/vue'
import Login from '@/ui/views/Login/Login.vue'
import StoryRouter from 'storybook-vue-router'

Vue.use(CompositionApi)
Vue.use(VueRouter)

storiesOf('Components', module)
  .addDecorator(StoryRouter())
  .add('Login', () => (
    components:  Login ,
    template: '<Login/>',
  ))

file.vue 的代码如下

<template>
... 
</template>

export default defineComponent(
  name: 'Login',
  setup(props,  root:  $router  ) 

    function redirectTo() 
       $router.push( name: 'Home' )
    

    return 
       redirectTo,
    

  ,
)

如果我写setup(props, root ) 然后root.$router(...) 它可以工作,但我想继续解构我的设置函数。有什么建议吗?

【问题讨论】:

【参考方案1】:

在storybook、router、vuetify.. Vue 应用上设置的所有插件都属于组件的parent。 所以你应该将它们绑定到组件本身。

你可以像这样扩展一个组件

const extendedComponent = Vue.component(
  componentName,
  
    extends: component.default || component,
    router,
    vuetify
  
)

【讨论】:

以上是关于Storybook vue composition api,_router of undefined的主要内容,如果未能解决你的问题,请参考以下文章

storybook创建vue组件库文档

使用 Storybook/vue 时别名不起作用

Vue JS with story hot config for storybook and jest error in Cannot find module '@storybook/vue/dist

如何在 Laravel-Vue.js 应用程序中使用 Storybook

如何安装 Storybook 和 Vue Cli 3?

在基于vue的组件库内使用Storybook搭建组件使用文档