如何在不使用 Vue.js (Element-ui) 中的道具的情况下更改 table 每一行中的列的内容?
How to change contents of a column in each row of a table without using a props in Vue.js (Element-ui)?
我从安静的某个时候就陷入了这个问题。我创建了一个包含 3 列的 table,其中两列我可以使用 prop 属性 来显示这两列每一行的内容。现在,对于第三列,我想显示另一个数组的内容,如何在第三列中显示这些信息。
请查找以下代码示例:
这是HTML代码
<el-table :data = "data_table">
<el-table-column
prop = "Id"
label= "Unique ID">
</el-table-column>
<el-table-column
prop = "color"
label = "Color">
</el-table-column>
<el-table-column
prop = ""
label = "Count">
<template slot-scope="scope">
<el-button type="text" @click="dialogVisible = true; get_total_count_users(scope.row)">{{users.length}}</el-button>
<!--Skipping the code for dialog box..I have tested that part pretty well, so I know it works. -->
</template>
</el-table-column>
</el-table>
这是代码的 javascript 部分:
<script>
export default {
data(){
return{
data_table:[], // I fill the data_table array using some AJAX/Axios calls which has props Id and Color.
users: [], // I fill the users array using some AJAX/Axios calls which has multiple user information.
};
},
methods:{
get_total_count_users(row){
// axios call, etc. This part works successfully, I checked the values.
}
}
</script>
对上面的代码稍微解释一下:
我对 API 进行了 AJAX/Axios 调用,其中 return 我在 data-table 数组中得到了 list/array 的值。它有两个道具,即 Id 和 Color。我对 api 进行了另一个 axios/AJX 调用,其中 return 根据 table 的那一行中显示的 ID 向我提供了用户列表。每行都有一个唯一的 ID。使用该 ID,我对 api 进行了 axios 调用 .. 例如,www.example/{{Id}}.com。这个 return 是我链接到该 ID 的用户列表.现在,我的下一个任务是显示总用户数(通过获取用户数组的长度)并将其显示为按钮。但是,由于我没有使用 prop 来显示值(每行用户数组的长度),因此按钮中的值在所有行中显示相同。如果我单击任何行上的按钮,它会在整个列中不断变化。
get_total_count_users(scope.row) 函数用于对 www.example/{{Id}}.com 进行 axios/AJAX 调用,并存储与用户数组中的那个 ID。
请参考下图:
最初,所有值都是 0,因为第一行中的 ID 有 0 个用户附加到它。
当我单击第 3 行按钮(最初为 0)时,该列中的所有值都更改为 2,因为第 3 行中的 ID 有两个用户与之相关联。
因此,这里的问题是,我只想根据该 ID 显示每一行的用户总数(计数),而不使用道具 属性。
希望以上的解释和例子对理解问题有所帮助。
任何帮助将不胜感激。
答案将解决问题,但不是定义为从多个数组中获取数据到您的数据中的特定解决方案table。
您可以链接您的 axios 响应,然后使用 foreach 将变量添加到数组中的对象。
所以我假设你正在像这样调用 mount 上的方法:
data: () => ({ tableData: [] }),
mounted() {
this.getData();
}
现在在你的 getData() 函数中进行不同的 axios 调用,并将你的响应放入 table,像这样。
methods: {
getData() {
var myTableData = [];
axios({ method: 'GET', url: 'http://first-url', headers: [...] }).then(res => {
//we have got the table data here
myTableData = res.data;
//looping through data and making axios calls based on data.
myTableData.foreach((row, index) => {
var newUrl = 'https://getdatafrom.com/'+ row.id+'/'; //using the data from previous call.
axios({ method: 'GET', url: newUrl, headers: [...]}).then(res2 => {
var counts = res.data;
// adding variable myCount to the table data array.
row.myCount = counts[index];
}).catch(err => { console.error(err)})
})
// setting data object
this.tableData = myTableData;
}).catch(err => { console.error(err) })
}
}
如果您有任何问题,请告诉我。
我从安静的某个时候就陷入了这个问题。我创建了一个包含 3 列的 table,其中两列我可以使用 prop 属性 来显示这两列每一行的内容。现在,对于第三列,我想显示另一个数组的内容,如何在第三列中显示这些信息。
请查找以下代码示例:
这是HTML代码
<el-table :data = "data_table">
<el-table-column
prop = "Id"
label= "Unique ID">
</el-table-column>
<el-table-column
prop = "color"
label = "Color">
</el-table-column>
<el-table-column
prop = ""
label = "Count">
<template slot-scope="scope">
<el-button type="text" @click="dialogVisible = true; get_total_count_users(scope.row)">{{users.length}}</el-button>
<!--Skipping the code for dialog box..I have tested that part pretty well, so I know it works. -->
</template>
</el-table-column>
</el-table>
这是代码的 javascript 部分:
<script>
export default {
data(){
return{
data_table:[], // I fill the data_table array using some AJAX/Axios calls which has props Id and Color.
users: [], // I fill the users array using some AJAX/Axios calls which has multiple user information.
};
},
methods:{
get_total_count_users(row){
// axios call, etc. This part works successfully, I checked the values.
}
}
</script>
对上面的代码稍微解释一下: 我对 API 进行了 AJAX/Axios 调用,其中 return 我在 data-table 数组中得到了 list/array 的值。它有两个道具,即 Id 和 Color。我对 api 进行了另一个 axios/AJX 调用,其中 return 根据 table 的那一行中显示的 ID 向我提供了用户列表。每行都有一个唯一的 ID。使用该 ID,我对 api 进行了 axios 调用 .. 例如,www.example/{{Id}}.com。这个 return 是我链接到该 ID 的用户列表.现在,我的下一个任务是显示总用户数(通过获取用户数组的长度)并将其显示为按钮。但是,由于我没有使用 prop 来显示值(每行用户数组的长度),因此按钮中的值在所有行中显示相同。如果我单击任何行上的按钮,它会在整个列中不断变化。
get_total_count_users(scope.row) 函数用于对 www.example/{{Id}}.com 进行 axios/AJAX 调用,并存储与用户数组中的那个 ID。
请参考下图:
最初,所有值都是 0,因为第一行中的 ID 有 0 个用户附加到它。
当我单击第 3 行按钮(最初为 0)时,该列中的所有值都更改为 2,因为第 3 行中的 ID 有两个用户与之相关联。
因此,这里的问题是,我只想根据该 ID 显示每一行的用户总数(计数),而不使用道具 属性。
希望以上的解释和例子对理解问题有所帮助。 任何帮助将不胜感激。
答案将解决问题,但不是定义为从多个数组中获取数据到您的数据中的特定解决方案table。
您可以链接您的 axios 响应,然后使用 foreach 将变量添加到数组中的对象。 所以我假设你正在像这样调用 mount 上的方法:
data: () => ({ tableData: [] }),
mounted() {
this.getData();
}
现在在你的 getData() 函数中进行不同的 axios 调用,并将你的响应放入 table,像这样。
methods: {
getData() {
var myTableData = [];
axios({ method: 'GET', url: 'http://first-url', headers: [...] }).then(res => {
//we have got the table data here
myTableData = res.data;
//looping through data and making axios calls based on data.
myTableData.foreach((row, index) => {
var newUrl = 'https://getdatafrom.com/'+ row.id+'/'; //using the data from previous call.
axios({ method: 'GET', url: newUrl, headers: [...]}).then(res2 => {
var counts = res.data;
// adding variable myCount to the table data array.
row.myCount = counts[index];
}).catch(err => { console.error(err)})
})
// setting data object
this.tableData = myTableData;
}).catch(err => { console.error(err) })
}
}
如果您有任何问题,请告诉我。