引用属性作为 Vue.js 组件中的 props

巴格兰

我已经开始研究棋盘游戏原型并决定使用 Vue.js。我对 JavaScript 有一些经验,一切都很顺利……直到我尝试访问组件中通过“props”传递的属性。

这是整个代码:

<!DOCTYPE HTML>

<html>

<head>
  <title>Board</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

  <style type="text/css">
    #board {
      width: 600px;
    }
    .square { width: 100px; height: 100px; margin: 1px; border: 1px solid grey; display: inline-block; float: left; }
  </style>
</head>

<body>

  <div id="board">

    <square v-for="square in squares"></square>

  </div>

  <script>
    var app = new Vue({
      el: '#board',
      data: {
        squares: []
      }
    })

    const rows = 5
    const cols = 5
    const reservedLocation = { row: 2, col: 2 }

    Vue.component('square', {
      props: [
        'row',
        'col',
        'type',
      ],
      template: '<div class="square" v-on:click="logLocation"></div>',
      methods: {
        logLocation: function() {
          console.log(this)
          console.log("Location: " + this.col + "x" + this.row )
        },
      },
    })

    for (var row=0; row<rows; row++) {
      for (var col=0; col<cols; col++) {
        const type = (row == reservedLocation.row && col == reservedLocation.col) ? 'reserved' : 'empty'
        app.squares.push({ row: row, col: col, type: type })
      }
    }

  </script>

</body>

</html>

发生的事情是“板”div 充满了“正方形”组件。每个方形组件都有“row”、“col”和“type”属性,作为“props”传递给它。当用户点击一个方块时,相应组件的“logLocation”函数被调用,该函数所做的就是记录“row”和“col”属性。

一切正常,除了记录的消息是:“位置:undefinedxundefined”,换句话说,this.col 和 this.row 似乎都未定义。我已经检查了“这个”,它似乎是正确的组件。

我确信这是显而易见的,但我无法在官方文档、教程甚至这里,堆栈溢出本身中找到答案——也许我没有使用正确的术语。

一些新信息:'row' 和 'col' 属性设置在组件对象和 '$props' 属性中,但它们返回的值是 'undefined'。我是否以某种方式错误地传递了参数?


解决方案

事实证明,Vue.js 文档中有一个部分专门用于将“v-for”与组件一起使用:“v-for with a Component”,这是代码的相关部分:

  <div id="board">

    <square
      v-for="square in squares"
      :key="square.id"
      :row="square.row"
      :col="square.col"
      :type="square.type"
    ></square>

  </div>

非常感谢斯蒂芬托马斯为我指明了正确的方向!

斯蒂芬·托马斯

您已经正确定义了 props,并且您正确地访问了 props,但是您实际上还没有将它们设置为任何值。标记:

<square v-for="square in squares"></square>

不会将道具传递给组件。也许你想要类似的东西

<div v-for="row in rows" :key="row">
    <div v-for="col in cols" :key="col">
        <square :row="row" :col="col"></square>
    </div>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 vue.js 组件中操作 props

来自分类Dev

在vue.js组件中反应this.props.children

来自分类Dev

vue js 无法正确显示 props 组件

来自分类Dev

更改根组件中的值时,不会更新子组件中的Vue.js props值

来自分类Dev

对子组件 Vue.js 上的 props 数组进行排序

来自分类Dev

访问Ajax函数中的Vue.js组件属性

来自分类Dev

如何在React中引用组件的props?

来自分类Dev

组件 Vue.js 中的渲染组件

来自分类Dev

Vue js 中的递归组件

来自分类Dev

如何在Vue.js中的代码中更改组件属性的值?

来自分类Dev

尝试从 Laravel 中的 vue.js 组件中检索元素数据属性

来自分类Dev

this.props.dispatch 不是 react js 组件文件中的函数

来自分类Dev

是否可以在组件中获取分配的引用名称?Vue.js

来自分类Dev

Vue.js 2.x:无法从组件中引用 Mixin?

来自分类Dev

如何将对象的属性作为prop传递给vue.js组件

来自分类Dev

Vue.js在组件中获取元素

来自分类Dev

Vue.js组件中的高图

来自分类Dev

Vue.js在组件中获取元素

来自分类Dev

在vue.js中渲染动态组件?

来自分类Dev

Vue.js中的动态导航组件

来自分类Dev

vue.js中组件之间的通信

来自分类Dev

Vue JS 在组件中设置数据收集

来自分类Dev

JS 中的“翻译”{ ...props }

来自分类Dev

在Vue.JS的父组件中创建子组件

来自分类Dev

在Vue.JS的父组件中创建子组件

来自分类Dev

在 vue.js 中从子组件更改父组件

来自分类Dev

在 Vue.js 中从子组件更新父组件

来自分类Dev

Vue js props 值未定义

来自分类Dev

在事件处理程序中引用`this` vue组件