vue codemirror刷新的问题

在table的操作列加上elementui 的弹出层,弹出层里面包含codemirror

之前的错误代码

<el-table-column label="操作" width="222">
     <template slot-scope="scope">
                      <el-popover
                                placement="left"
                                width="250"
                                trigger="click"
                                @show="refreshScript(scope.row.script)" :key="scope.$index">
                            <codemirror v-model="scope.row.script"
                                        :value="scope.row.script"
                                        :options="tableScriptCodemirrorOption"
                                        ref="scriptCodemirror"
                            ></codemirror>
                            <el-button slot="reference" type="text" size="mini">脚本转换</el-button>
                        </el-popover>
     </template>
</el-table-column>
//methods方法
refreshScript (script) {
       let codemirror = this.$refs["scriptCodemirror"].codemirror; //
          codemirror.setValue(script);
             setTimeout(() => {
                    codemirror.refresh();
                }, 100) //一定要setTimeout,保证在setValue()之后再刷新
       },

会出现的问题是:codemirror里面出现的始终未第一次渲染的值


image.png

解决方法:将ref加上index保证他们是唯一的codemirror

<el-table-column label="操作" width="222">
     <template slot-scope="scope">
                      <el-popover
                                placement="left"
                                width="250"
                                trigger="click"
                                @show="refreshScript(scope.row.script,scope.$index)" :key="scope.$index">
                            <codemirror v-model="scope.row.script"
                                        :value="scope.row.script"
                                        :options="tableScriptCodemirrorOption"
                                       :ref="'scriptCodemirror'+scope.$index"
                            ></codemirror>
                            <el-button slot="reference" type="text" size="mini">脚本转换</el-button>
                        </el-popover>
     </template>
</el-table-column>
//methods方法
refreshScript (script,index) {
       let codemirror = this.$refs["scriptCodemirror" + index].codemirror;
          codemirror.setValue(script);
             setTimeout(() => {
                    codemirror.refresh();
                }, 100)
       },
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容