首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态计算属性名

动态计算属性名
EN

Stack Overflow用户
提问于 2018-11-16 05:59:46
回答 3查看 11.5K关注 0票数 3
代码语言:javascript
复制
computed: {

    ...mapGetters(['getElements']),

    element() {
        return this.getElements(this.formId, this.sectionId, this.elementId);
    },

    [this.element.inputName]: { 
    },

}

抛出一个错误:Uncaught TypeError: Cannot read property 'element' of undefined

如何动态设置道具名称?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-17 06:08:16

您可以动态添加计算的属性,如本文所示,

动态生成计算属性

由于属性名称源是嵌套的,而且(可能)是异步的,因此需要一个深度监视程序来处理更改。

该属性的使用是有限的,您不能在在创建时编译的证监会模板上使用它。在方法中使用它时,可能需要根据调用序列来检查它是否存在。

代码语言:javascript
复制
computed: {
  element() {
    return this.getElements(...);
  },
},
watch: {
  element: {
    handler: function (newValue) {
      if (newValue.inputName) {
        this.addProp(['element', 'inputName'], () => { return 'someValue' })
      }
    },
    deep: true
  }
},
methods: {
  addProp (path, getter) {
    // Get property reference or undefined if not (yet) valid
    const propName = path.reduce((acc, prop) => acc ? acc[prop] : undefined, this)
    if (!propName) { return }

    const computedProp = {
      get() {
        return getter()
      }
    }
    this[propName] = computedProp
  },
}
票数 7
EN

Stack Overflow用户

发布于 2018-11-16 06:50:06

在创建Vue组件选项对象时,您的对象不是组件的Vue实例(在创建之前),因此您无法使用诸如计算特性或其他Vue组件属性(道具、数据等)。

票数 0
EN

Stack Overflow用户

发布于 2020-11-21 04:18:06

我也有同样的问题,或者说我做了这个.

代码语言:javascript
复制
<script>
export default {
  data: {
    return: {
      init: 0
    }
  },
computed: {
    makeComputed() { 
init++ // call something in data to fire the computed function  
      Object.assign(this, ...this.$store.state.auth.objectwithmanyprops)
      return this.$store.state.auth.objectwithmanyprops 
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53332250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档