当前位置: 首页 > 知识库问答 >
问题:

前端 - vue2项目this.$createElement创建的自定义组件里访问不了vuex,怎么解决?

晋鹤轩
2023-05-18

情况是这样,打算用this.$message提示信息,然后里面放上自己自定义的组件private-table,然后组件里用到了vuex,也就是this.$store里的数据,但是是undefined,请问出现这个问题的原因是啥,怎么解决?

          const h = this.$createElement          
          this.$message({
            message: h('div', {}, [
              h('div', {}, ['导入失败,Excel中存在重复信息:']),
              h('private-table', {
                props: {
                  table: {},
                  columns: [],
                  data: res.result,
                  'i-header-cell-style': 'height:36px;padding:0px;background-color:#FAFAFA;color:#333333;'
                }
              })
            ]),
            type: 'error'
          })

共有2个答案

姬和歌
2023-05-18

vue2里,element-ui的message是通过Vue.extend动态创建的,是一个独立的vue实例,不共享router、store这些项目初始实例才有的属性

如果都是用this.$message的形式调用的话,可以重写这个方法,在其通过Vue.extend创建message组件时,把项目初始实例传入parent选项中

或者改造private-table,把用到的router、store都是用import的方式手动引入

祁飞扬
2023-05-18
const h = this.$createElement;
this.$message({
  message: h('div', {}, [
    h('div', {}, ['导入失败,Excel中存在重复信息:']),
    h('private-table', {
      props: {
        table: {},
        columns: [],
        data: res.result,
        store: this.$store,
        'i-header-cell-style': 'height:36px;padding:0px;background-color:#FAFAFA;color:#333333;'
      }
    })
  ]),
  type: 'error'
});

private-table组件:

<script>
export default {
  props: {
    // ...
    store: Object 
  },
  created() {
    console.log(this.store); 
  }
};
</script>
 类似资料:
  • 场景是这样的,一张新建/编辑页,编辑页的数据是接口获取的。页面里的表单元素里有一些复杂的计算逻辑,请问: 1.计算逻辑是写在methods里,然后表单元素change或者input的时候调用它,还是直接写在computed里计算它? 2.我一开始是这么写的,computed计算出需要的结果a,b,c,d(且这四个值又能通过表单元素被修改,如input)。然后watch监听a,b,c,d的变化,赋值

  • 用的编辑器是webstorm,发现在node modules里打断点没用。

  • 举例说一下,比如有2个函数,我要对他们做相同的前置判断条件。

  • 怎么让span相对于最外层的div固定定位?(fixed),为什么最外层div的postion设置为了relative,span的postion设置为fixed,top:0,right:0后,会跑到整个页面的右上角?

  • 场景是这样的,我们的单据新建页点击提交按钮后,拿到单据ID,然后根据单据ID触发工作流初始化接口获取到工作流人员信息。问题在于,点击提交后,该怎么展示选人比较好,一个弹框?或者在原有页面下新增选人信息?更或者关闭当前页,在另一个页面弹框选人?想听听各位的想法,你们业务上是怎么做的。

  • 现在是这样,所有页面都被包在一个容器里,而这个容器写了background-color和padding,但是我希望在某一个页面里,不需要设置这两个,该怎么做最优?我想到的是js获取dom元素修改。