【问题标题】:VueJs validate child component names in parent componentVueJs 验证父组件中的子组件名称
【发布时间】:2017-08-18 02:22:21
【问题描述】:

我有一个如下所示的父组件,它实现了动态组件切换。挑战在于我想确保索引 0 处的 componentArgs name 数据有效。 this.components.indexOf(componentArgs[0]) > -1 行会引发 TypeError。

Parent.vue?e9d7:xx Uncaught TypeError: Cannot read property 'indexOf' 未定义的

显然,this.components 不是访问父组件的正确方法。我该如何做到这一点?

<template>
  <component v-bind:is="currentForm" v-on:switchcomponent="switchComponent"></component>            
</template>

<script>
import Login from '@/components/Login'
import Signup from '@/components/Signup'

export default {
  name: 'Parent',
  components: {
    login: Login,
    signup: Signup
  },
  data () {
    return {
      title: 'Sign Up or Login',
      email: '',
      currentForm: 'login'
    }
  },
  methods: {
    switchComponent: function (componentArgs) {
      // componentArgs format: [name, title, email (Use empty string if N/A.)]
      let name = 0
      let title = 1
      let email = 2
      console.log('component: ' + componentArgs)

      if (this.isValidComponent(componentArgs)) {
        this.currentForm = componentArgs[name]
        this.title = componentArgs[title]
        this.email = componentArgs[email]
      }
    },
    isValidComponent: function (componentArgs) {
      let exactLength = 3

      if (componentArgs.length === exactLength) {
        console.log('components ' + this.components)
        if (this.components.indexOf(componentArgs[0]) > -1) {
          console.log('component exists')
          return true
        }

        return false
      }

      return false
    }
  }
}
</script>

【问题讨论】:

    标签: javascript vue.js vuejs2 vue-component


    【解决方案1】:

    components 属性可以从

    访问
    this.$options.components
    

    所以你的功能可能是

    isValidComponent(name){
      return !!this.$options.components[name];
    }
    

    其中 name 是组件的名称。我真的不知道你在 componentArgs 中传递了什么。

    Example.

    【讨论】:

    • componentArgs 是一个数组,其中索引 0 是组件名称,所以 !!this.$options.components[ componentArgs[0] ] 为我工作。
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 2017-04-05
    • 1970-01-01
    • 2021-06-17
    • 2018-08-30
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多