【问题标题】:Maximum call stack size exceeded when calling vue router调用vue路由器时超出最大调用堆栈大小
【发布时间】:2020-08-14 18:28:32
【问题描述】:

这是我的代码,我并不想做任何花哨的事情,只是在路由器上学习工作,但出于某种原因,每当我尝试单击路由器链接元素时,我都会收到此错误。关于可能导致这种情况的任何想法?我知道 Vue 可以在 v-for 循环调用中抛出一些错误,但我不确定我做错了什么,这对我来说似乎是一个非常标准的调用。

vue.runtime.esm.js?2b0e:1888 RangeError: Maximum call stack size exceeded
at Watcher.get (vue.runtime.esm.js?2b0e:4493)
at new Watcher (vue.runtime.esm.js?2b0e:4468)
at mountComponent (vue.runtime.esm.js?2b0e:4073)
at VueComponent.Vue.$mount (vue.runtime.esm.js?2b0e:8415)
at init (vue.runtime.esm.js?2b0e:3118)
at createComponent (vue.runtime.esm.js?2b0e:5978)
at createElm (vue.runtime.esm.js?2b0e:5925)
at createChildren (vue.runtime.esm.js?2b0e:6053)
at createElm (vue.runtime.esm.js?2b0e:5954)
at VueComponent.patch [as __patch__] (vue.runtime.esm.js?2b0e:6477)

<template>
  <div class="hello">
    <h1>{{msg}}</h1>
    <table>
      <tr>
      <th>NAME</th>
      <th>ADDRESS</th>
      <th>PHONE NUMBER</th>
      <th>CONDITIONAL</th>  
      </tr>
      <tbody>
      <tr v-for="player in players" :key="player.id" v-bind:class="{bad: player.flag === false}">
    <router-link :to="{name:'Players', params: {id: player.id}}"><td>{{player.name}}</td></router-link>
    <td>{{player.address}}</td>
    <td>{{player.phone}}</td>
    <td v-if="player.flag === true">yes</td>
    <td v-else>no</td>
  </tr>
      </tbody>
    </table>
    <p><button v-on:click="count += 1">Add One More Click</button></p>
    <p>The button has been clicked {{ count }} times</p>
  </div>
</template>

<script>

export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  data: function() {
    return{
    count: 0,
    players: [
        {
          id: 1,
          name: "john",
          address: "111",
          phone: "12123",
          flag: true,
        },
        {
          id: 2,
          name: "jjoe",
          address: "111",
          phone: "12123",
          flag: false,
        },
        {
          id: 3,
          name: "josh",
          address: "111",
          phone: "12123",
          flag: true
        }
      ]
    }
  }
}
</script>

Router.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import Players from '../views/Players.vue'

Vue.use(VueRouter)

  const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: function () {
      return import(/* webpackChunkName: "about" */ '../views/About.vue')
    }
  },
  {
    path: '/player/:id',
    name: "Players",
    component: Players,
    props: true
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

players.vue

<template>
  <div class="home">
    <Players/>
  </div>
</template>

<script>
// @ is an alias to /src
import Players from '@/components/Players.vue'

export default {
  name: 'Players',
  components: {
    Players
  }
}
</script>

【问题讨论】:

  • 我尝试更改它,但仍然出现相同的错误,现在显示其他两个文件,@LawrenceCherone

标签: javascript vue.js


【解决方案1】:

问题出在players.vue组件中,你不能声明它并在同一个文件中使用它

这应该可行:

<template>
  <div class="home">
   My Awesome Player
  </div>
</template>

<script>
export default {
  name: 'Players'
}
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2017-01-14
    • 2017-05-23
    • 2019-04-27
    • 1970-01-01
    • 2019-12-26
    • 2021-12-05
    相关资源
    最近更新 更多