javascript - Vuejs未定义属性错误但已定义

标签 javascript templates vue.js undefined vuex

我有一个简单的 Vue 组件,它只列出服务器连接数据:

<template>
  <div class="container">
    <div class="row">
      <div class="col-xs-12">
        <div class="page-header">
          <h2 class="title">Data</h2>
        </div>
        <br>
      </div>
      <div class="col-xs-12">
        <table class="table">
          <tr>
            <td>Server</td>
            <td><strong>{{config.servers}}</strong></td>
          </tr>
          <tr>
            <td>Port</td>
            <td><strong>{{config.port}}</strong></td>
          </tr>
          <tr>
            <td>Description</td>
            <td><strong>{{config.description}}</strong></td>
          </tr>
          <tr>
            <td>Protocol</td>
            <td :class="{'text-success': isHttps}">
              <i v-if="isHttps" class="fa fa-lock"></i>
              <strong>{{config.scheme}}</strong>
            </td>
          </tr>
        </table>
      </div>
    </div>
  </div>
</template>

<script>
import { mapState } from 'vuex'

export default {
  name: 'Application',

  data () {
    return {
      config: {
        scheme: '',
        servers: '',
        port: '',
        description: ''
      }
    }
  },

  computed: {
    ...mapState(['server']),

    isHttps: () => this.config.scheme === 'https'
  },

  mounted () {
    const matched = this.server.match(/(https?):\/\/(.+):(\d+)/)
    this.config = {
      scheme: matched[1],
      servers: matched[2],
      port: matched[3],
      description: window.location.hostname.split('.')[0] || 'Server'
    }
  }
}
</script>

安装此组件时,Vuex 中的 server 已经定义并完成,如果我尝试 console.log(this.server),它会显示正确的内容网址。问题是,我的计算属性 isHttps 抛出以下错误:

[Vue warn]: Error in render function: "TypeError: Cannot read property 'scheme' of undefined"

found in

---> <Application> at src/pages/Aplicativo.vue
       <App> at src/App.vue
         <Root>

我已经尝试将config更改为其他内容,例如configurationdetails,甚至更改了mounted code> 到 created,但错误不断弹出,并且我的模板根本没有呈现

首先,我开始将 config 设置为计算属性,但错误已经出现在我的控制台中。顺便说一下,像这样使用 store 作为计算属性也会引发错误,指出我的 $store 未定义:

server: () => this.$store.state.server

我能做什么?

最佳答案

您正在使用箭头函数来计算 isHttps。在这种情况下,this 指的是 window 而不是 Vue 实例,因此您将收到一条 cannot read property of undefined 消息,这是正确的 ES2015 语法是:

isHttps() { 
  return this.config.scheme === 'https'
}

这也是与 server: () => this.$store.state.server 相同的问题,应该是:

server() { 
  return this.$store.state.server
}

关于javascript - Vuejs未定义属性错误但已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46889006/

相关文章:

c++ - 我似乎无法使用 enable_if 实例化类特化

c++ - 非类型模板参数不是常量表达式

javascript - 在 Vuejs 中使用带有动态键的 v-for

javascript - 如何更新 vue.js 中的值?

javascript - 如何获得div的顶级父级

javascript - 如何使用键详细信息修改嵌套对象的属性

javascript - 利用 Javascript 将多个动态命名的下拉菜单更改为一个值

c++ - 专门包含 enableif 的模板

css - 在过滤选项时保持下拉 <select> 控件打开

javascript - 无法更改 VueJs 插件的 .Css 文件