use the table component of elementui to play audio. After turning the page, the content is played for the first time
.the source code is as follows:
<template>
  <div >
    <head-top></head-top>
    <div class="table_container">
      <el-table
        :data="tableData"
        highlight-current-row
        style="width: 100%" :cell-style="cell">
        <el-table-column
          type="index"
          width="50">
        </el-table-column>
        <el-table-column
          property="id"
          label="ID"
          width="80">
        </el-table-column>
        <el-table-column
          property="title"
          label=""
          width="150">
        </el-table-column>
        <el-table-column
          property="author"
          label=""
          width="80">
        </el-table-column>
        <el-table-column
          property="dynasty"
          label=""
          width="80">
        </el-table-column>
        <el-table-column
          property="scores"
          label=""
          width="80">
        </el-table-column>
        <el-table-column
          property="tag"
          label=""
          width="250">
        </el-table-column>
        <el-table-column
          property="operate"
          label="">
          <template slot-scope="scope">
            <router-link :to="{ name: "num", params: { id: scope.row.id }}" target="_blank">
              <el-button size="mini"><i class="el-icon-view"></i></el-button>
            </router-link>
            <el-button
              size="mini"
              type="primary"
              v-show="scope.row.audiourl"
              @click="play(scope.$index, scope.row)"><i class="iconfont icon-play"></i>
              <audio :id="scope.row.audiourl"><source :src="scope.row.audiourl"  type="audio/mpeg" /></audio>
              </el-button>
            <el-button
              size="mini"
              type="success"
              @click="handleRecommend(scope.$index, scope.row)"><i class="el-icon-success"></i></el-button>
            <el-button
              size="mini"
              type="danger"
              @click="handleDelete(scope.$index, scope.row)"><i class="el-icon-delete"></i></el-button>
          </template>
        </el-table-column>
      </el-table>
      <div class="block">
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page="currentPage4"
          :page-sizes="[10, 50, 100]"
          :page-size="10"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total">
        </el-pagination>
      </div>
    </div>
  </div>
</template>
<script>
import headTop from "/components/headTop"
import axios from "axios"
import { Loading } from "element-ui"
export default {
  data () {
    return {
      tableData: [],
      currentPage4: 1,
      limit: 10,
      total: 100,
      icon: "",
      audio: ""
    }
  },
  created () {
    this.getPages()
  },
  components: {
    headTop
  },
  methods: {
    getPages () {
      let loadingInstance = Loading.service({ fullscreen: true, text: "" })
      axios.get("/v1/gushiwen/selectByScores?pageNum=" + this.currentPage4 + "&pageSize=" + this.limit).then((response) => {
        if (response.status === 200) {
          this.tableData = response.data.list
          this.total = response.data.total
          for (let i of this.tableData) {
            if (i.audiourl == null || i.audiourl === "") {
              i.audiourl = false
            } else {
              i.audiourl = "https://img.nichuiniu.cn/mp3/" + i.audiourl
            }
          }
          loadingInstance.close()
        }
      }).catch(function (err) {
        console.error(err)
      })
    },
    handleSizeChange (val) {
      this.limit = val
      this.getPages()
      if (this.audio !== "") {
        this.audio.pause()
        this.icon.className = "iconfont icon-play"
      }
    },
    handleCurrentChange (val) {
      this.currentPage4 = val
      this.getPages()
      if (this.audio !== "") {
        this.audio.pause()
        this.icon.className = "iconfont icon-play"
      }
    },
    cell ({row, column, rowIndex, columnIndex}) {
      return "padding:4px 0"
    },
    play (index, row) {
      // 
      if (this.audio !== "" && this.audio !== document.getElementById(row.audiourl)) {
        this.audio.pause()
        this.icon.className = "iconfont icon-play"
      }
      this.audio = document.getElementById(row.audiourl)
      this.icon = document.getElementById(row.audiourl).previousElementSibling
      if (this.audio.paused) {
        this.audio.play()
        this.icon.className = "iconfont icon-zanting"
      } else {
        this.audio.pause()
        this.icon.className = "iconfont icon-play"
      }
    }
  }
}
</script>
if the audio is not played repeatedly before each execution of the getpage method, the code is as follows:
<template>
  <div >
    <head-top></head-top>
    <div class="table_container">
      <el-table
        :data="tableData"
        highlight-current-row
        style="width: 100%" :cell-style="cell">
        <el-table-column
          type="index"
          width="50">
        </el-table-column>
        <el-table-column
          property="id"
          label="ID"
          width="80">
        </el-table-column>
        <el-table-column
          property="title"
          label=""
          width="150">
        </el-table-column>
        <el-table-column
          property="author"
          label=""
          width="80">
        </el-table-column>
        <el-table-column
          property="dynasty"
          label=""
          width="80">
        </el-table-column>
        <el-table-column
          property="scores"
          label=""
          width="80">
        </el-table-column>
        <el-table-column
          property="tag"
          label=""
          width="250">
        </el-table-column>
        <el-table-column
          property="operate"
          label="">
          <template slot-scope="scope">
            <router-link :to="{ name: "num", params: { id: scope.row.id }}" target="_blank">
              <el-button size="mini"><i class="el-icon-view"></i></el-button>
            </router-link>
            <el-button
              size="mini"
              type="primary"
              v-show="scope.row.audiourl"
              @click="play(scope.$index, scope.row)"><i class="iconfont icon-play"></i>
              <audio :id="scope.row.audiourl"><source :src="scope.row.audiourl"  type="audio/mpeg" /></audio>
              </el-button>
            <el-button
              size="mini"
              type="success"
              @click="handleRecommend(scope.$index, scope.row)"><i class="el-icon-success"></i></el-button>
            <el-button
              size="mini"
              type="danger"
              @click="handleDelete(scope.$index, scope.row)"><i class="el-icon-delete"></i></el-button>
          </template>
        </el-table-column>
      </el-table>
      <div class="block">
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page="currentPage4"
          :page-sizes="[10, 50, 100]"
          :page-size="10"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total">
        </el-pagination>
      </div>
    </div>
  </div>
</template>
<script>
import headTop from "/components/headTop"
import axios from "axios"
import { Loading } from "element-ui"
export default {
  data () {
    return {
      tableData: [],
      currentPage4: 1,
      limit: 10,
      total: 100,
      icon: "",
      audio: ""
    }
  },
  created () {
    this.getPages()
  },
  components: {
    headTop
  },
  methods: {
    getPages () {
      this.tableData = []
      let loadingInstance = Loading.service({ fullscreen: true, text: "" })
      axios.get("/v1/gushiwen/selectByScores?pageNum=" + this.currentPage4 + "&pageSize=" + this.limit).then((response) => {
        if (response.status === 200) {
          this.tableData = response.data.list
          this.total = response.data.total
          for (let i of this.tableData) {
            if (i.audiourl == null || i.audiourl === "") {
              i.audiourl = false
            } else {
              i.audiourl = "https://img.nichuiniu.cn/mp3/" + i.audiourl
            }
          }
          loadingInstance.close()
        }
      }).catch(function (err) {
        console.error(err)
      })
    },
    handleSizeChange (val) {
      this.limit = val
      this.getPages()
      if (this.audio !== "") {
        this.audio.pause()
        this.icon.className = "iconfont icon-play"
      }
    },
    handleCurrentChange (val) {
      this.currentPage4 = val
      this.getPages()
      if (this.audio !== "") {
        this.audio.pause()
        this.icon.className = "iconfont icon-play"
      }
    },
    cell ({row, column, rowIndex, columnIndex}) {
      return "padding:4px 0"
    },
    play (index, row) {
      // 
      if (this.audio !== "" && this.audio !== document.getElementById(row.audiourl)) {
        this.audio.pause()
        this.icon.className = "iconfont icon-play"
      }
      this.audio = document.getElementById(row.audiourl)
      this.icon = document.getElementById(row.audiourl).previousElementSibling
      if (this.audio.paused) {
        this.audio.play()
        this.icon.className = "iconfont icon-zanting"
      } else {
        this.audio.pause()
        this.icon.className = "iconfont icon-play"
      }
    }
  }
}
</script>
the only difference between the above two pieces of code is whether it is set before the request. I don"t know why
this.tableData = []the environmental background of the problems and what methods you have tried
related codes
/ / Please paste the code text below (do not replace the code with pictures)
