当前位置: 首页 > 知识库问答 >
问题:

vue.js - vue components传值,在组件里页面使用 slot-scope,scope.row,报错?

云胤
2023-12-26
      <rightColumn        :urlParams="urlParams"        :equipmentList="equipmentList"        :pipeDiameterLenghList="pipeDiameterLenghList"        :unitList="unitList"        :systemWarningInfo="systemWarningInfo"        :modelTabsName="rightColumnTabsName"        :pipeLenghHighDiffList="pipeLenghHighDiffList"        :equipAttrubute="equipAttrubute"      ></rightColumn>

vue3的版本我用的vue2写法,我在1个components里传了多个值,在rightColumn页面使用 slot-scope,

报错信息:Property "scope" was accessed during render but is not defined on instance.

很多警告信息:Unhandled error during execution of scheduler flush. This is likely a Vue internals bug.

            <el-table :data="pipeLenghHighDiffList" style="width: 100%">              <!-- 检查项prop="checkItem" -->              <el-table-column                                :label="`${$t('glsj.checkItem')}`"              >                <template slot-scope="scope">                  <span>{{ scope.row.checkItem }}</span>                </template>              </el-table-column>

我尝试只传1个值,使用slot-scope="scope",取值scope.row,也报错。

<rightColumn        :pipeLenghHighDiffList="pipeLenghHighDiffList"      ></rightColumn>

共有2个答案

鲜于宜修
2023-12-26

Vue 3 还有 slot-scope 这个属性?不是从 Vue 2.6 开始不就已经废弃了吗?只不过还是可以用。
你如果说要在 Vue 3 中用作用域插槽就改用 v-slot 就好了呀。

作用域插槽 - 插槽 Slots | Vue.js
#slot-scope 废弃 | API — Vue.js

左丘宜然
2023-12-26

这个问题涉及到Vue.js组件之间的数据传递和作用域。

首先,关于报错信息:TypeError: Cannot read properties of undefined (reading 'row'),这个错误通常发生在尝试访问未定义对象的属性时。在你的代码中,你尝试访问scope.row.checkItem,如果scope.row是未定义的,那么就会抛出这个错误。

其次,关于Unhandled error during execution of scheduler flush. This is likely a Vue internals bug. 这个警告信息通常表示在Vue的调度器刷新过程中发生了未处理的错误。这可能是由于Vue内部的一个bug,但也可能与你的代码有关。

解决方案:

  1. 检查传入的参数:确保你传递给rightColumn组件的所有属性(如pipeLenghHighDiffList)都是有效的,并且没有缺失任何必要的值。
  2. 使用v-slot替代slot-scope:在Vue 2中,你可以使用slot-scope来获取作用域插槽的数据。但在Vue 3中,slot-scope已被废弃,取而代之的是使用v-slot指令。你可以尝试将slot-scope="scope"替换为v-slot="scope"
  3. 检查数据类型:确保你传递的数据类型是正确的。例如,如果pipeLenghHighDiffList是一个数组,那么在模板中你应该直接使用scope.row.checkItem而不是通过模板字符串。
  4. 检查el-table-column的属性:确保你正确使用了el-table-column的属性。在你的代码中,你使用了:label="${$t('glsj.checkItem')}",这里使用了模板字符串和变量插值。确保你正确使用了变量插值语法。
  5. 检查组件之间的数据传递:如果你尝试传递多个值并且遇到问题,考虑将这些值包装在一个对象中,然后传递该对象。这样可以避免混淆每个值的来源和用途。

示例代码:

<template>  <right-column :data="myData"></right-column></template><script>export default {  data() {    return {      myData: {        pipeLenghHighDiffList: [/* your data here */],        // other properties...      }    };  }};</script>

rightColumn组件中:

<template>  <el-table :data="pipeLenghHighDiffList" style="width: 100%">    <el-table-column label="$t('glsj.checkItem')">      <template v-slot="scope">        <span>{{ scope.row.checkItem }}</span>      </template>    </el-table-column>    <!-- other columns... -->  </el-table></template>

请根据你的具体情况调整代码,并确保所有组件都已正确定义和导入。希望这可以帮助解决你的问题!如果还有其他问题,请随时提问。

 类似资料:
  • 2.5.0 新增 预期:function argument expression 用法: 用于将元素或组件表示为作用域插槽。特性的值应该是可以出现在函数签名的参数位置的合法的 JavaScript 表达式。这意味着在支持的环境中,你还可以在表达式中使用 ES2015 解构。它在 2.5.0+ 中替代了 scope。 此属性不支持动态绑定。

  • 本文向大家介绍vue template中slot-scope/scope的使用方法,包括了vue template中slot-scope/scope的使用方法的使用技巧和注意事项,需要的朋友参考一下 在vue 2.5.0+ 中slot-scope替代了 scope template 的使用情形为,我们已经封装好一个组建,预留了插槽,使用 的插槽 首先 我们的创建一个组建 组建很简单有一个 slot

  • 本文向大家介绍Vue.js中组件中的slot实例详解,包括了Vue.js中组件中的slot实例详解的使用技巧和注意事项,需要的朋友参考一下 Vue组件中的slot slot 可以实现在已经定义的组件中添加内容,组件会接收内容并输出,假如有一个组件person,它的里面包含的是个人信息,如下面这样 在应用的时候,当然希望这里面可以是灵活变化的,所以这就需要用到slot了 首先要做的事情就是创建这样一

  • vue3中子组件向父组件传值 在传值的时候为什么只能在声明一个方法的时候传递,而不能在定义click的时候传递呢

  • 本文向大家介绍深入理解vue中的slot与slot-scope,包括了深入理解vue中的slot与slot-scope的使用技巧和注意事项,需要的朋友参考一下 写在前面 vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项使用频率、使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生“算了吧,回头再学,反正已经可以写基础组件了”,

  • 为什么在 vue 文件里不报错? 类型提示都有的啊。