javascript - 如何动态地将表值分配给 v-for

标签 javascript html vue.js vuejs2

我有一个 <dl>用 v-for 填充的列表。在每个列表中,该元素还应该是一个表格,该表格应根据列表元素填充数据。 代码如下所示:

<button v-on:click="test">Check</button>
    <br><br>
    <dl>
        <dt id="listItem" v-for="cronname in cronnames" :key="cronname.id" 
        :value="cronname.id">
            {{cronname.name}}
            <span></span>
            <table>
                <tr>
                    <th>id</th>
                    <th>Start</th>
                </tr>
                <tr  v-for="cronjob in cronjobs" :key="cronjob.id">
                    <td>{{"ID: " + cronjob.id }}</td>
                    <td>{{"Start: " + cronjob.start }}</td>
                </tr>
            </table>
        </dt>
    </dl>

测试函数如下所示:

test: function(){
            let vm = this;
            for(var i = 0; i < vm.cronnames.length; i++)
            {

                vm.cronId = vm.cronnames[i].id;
                vm.cronIdUebertrag = vm.cronId;
                $.getJSON("/api/get_cronjob.php", {cronIdUebertrag: 
                this.cronIdUebertrag}, function (result) {
                    vm.cronjobs = result;
                });
            }
}

单击按钮时填充第二个 v-for。 问题是,每个列表项都获得相同的表格内容。可能是最后一个 cronjob 项目。 如何将表格中的数据分配/绑定(bind)到列表项中的数据,以便每个列表项都获得正确的表格内容?

提前致谢!

最佳答案

目前您只保留来自上次 ajax 调用的信息。相反,您需要将每个 ajax 调用的结果推送到一个数组中,并将该数组与您的第二个 v-for 一起使用。您也可以将数组与第一个 v-for 一起使用,并使思路更清晰。这段代码展示了这个想法,(因为我没有你的 ajax 端点或 vue 数据模式,我无法测试代码,但它应该让你进入球场):

<button v-on:click="test">Check</button>
<br><br>
<dl>
    <dt id="listItem" v-for="detail in cronDetails" :key="detail.id" 
    :value="detail.id">
        {{detail.name}}
        <span></span>
        <table>
            <tr>
                <th>id</th>
                <th>Start</th>
            </tr>
            <tr  v-for="cronjob in detail.jobs" :key="cronjob.id">
                <td>{{"ID: " + cronjob.id }}</td>
                <td>{{"Start: " + cronjob.start }}</td>
            </tr>
        </table>
    </dt>
</dl>

 data: {
     cronDetails = [];
 }

 ...

 test: function(){
        var _this = this;
        let vm = this;
        for(var i = 0; i < vm.cronnames.length; i++)
        {

            vm.cronId = vm.cronnames[i].id;
            vm.cronIdUebertrag = vm.cronId;
            $.getJSON("/api/get_cronjob.php", {cronIdUebertrag: 
            this.cronIdUebertrag}, function (result) {
                vm.cronjobs = result;
                _this.cronDetails.push({     //Update: I removed new
                      name: vm.cronnames[i],
                      id: vm.cronnames[i].id,
                      jobs: result
                });

            });
        }
 }

关于javascript - 如何动态地将表值分配给 v-for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54983673/

相关文章:

layout - 带有 <div> 的 HTML 表格布局?

jquery - Vue v-for 无法在幻灯片中正确渲染阴影

css - vuejs过渡组件外的元素应用了过渡效果

javascript - 如何使用 for 循环动态映射计数器?

javascript - 如何从 JQuery 中的表行中提取 PHP 值以供稍后使用?

javascript - 为什么在 Date 对象上使用 toISOString() 方法,每小时值比原始日期早一个小时?

javascript - 设置/更改/附加到 dojo-data-props 的方法

php - 发送消息副本 (HTML/PHP)

html - CSS height 100% 使元素高度超过100%

vue.js - 是否可以在没有 vue-cli 的情况下构建 vue 应用程序?