如何让vuejs中ready函数加载完之后执行某个函数?

我期望vue中tds全都渲染在界面上之后,再调用一个函数(其实这个函数主要作用是给表格中的选择框加监听,如果tds没有渲染,那监听也加不上去)。

<div class="row" id="app">
        <div class="col-sm-12 col-md-12 main">
            <table class="table table-bordered table-striped">
                <thead>
                <tr>
                    <th><input type="checkbox" id="checkAll" name="checkAll" /></th>
                    <th>日期</th>
                    <th>任务</th>
                    <th>是否执行</th>
                    <th>执行结果</th>
                    <th>影响行数</th>
                    <th>执行时间</th>
                    <th>执行时长</th>
                    <th>成功率</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody id="trs">
                <tr v-for="td in tds">
                    <td><input type="checkbox" name="checkItem" /></td>
                    <td>{{td.date}}</td>
                    <td>{{td.job}}</td>
                    <td>{{td.is_done==0?'未执行':'已执行'}}</td>
                    <td>{{td.is_success==0?'成功':(td.is_success==1?'失败':'')}}</td>
                    <td>{{td.nums}}</td>
                    <td>{{td.begintime}}</td>
                    <td>{{td.usedtime}}</td>
                    <td>{{td.rate}}</td>
                    <td v-if="td.is_done==0">
                    </td>
                    <td v-if="td.is_done==1">
                        <button v-on:click="rerun($index,td.monitor_id)" type="button" class="btn btn-default btn-xs"
                                style="padding:1px 10px;margin-top:-3px;margin-bottom:-2px;">重跑
                        </button>
                    </td>
                </tr>
                </tbody>
            </table>


        </div>
        <!--/.main -->
    </div>

尝试了

Vue.nextTick(function () {
  alert('new message'); // true
})

无效,在tds未展示在界面上时就alert了。

尝试了

vm.$nextTick(function () {
  alert('new message'); // true
})
也无效,在tds未展示在界面上时就alert了。

最后解决办法是增加一个vm.$watch('tds',function(val){ })函数,在vm改变后调用nextTick,最终可以在tds展示在界面之后调用我想要的函数。

var vm = new Vue({
        el: '#app',
        ready: function () {
            $.getJSON("/main/getMonitor", {"beginDate": getTheDate(-2), "endDate": getTheDate(0)}, function (result) {
                vm.$set('tds', result);
            });
        },
        data: {
            start: getTheDate(-2),
            end: getTheDate(0),
            isupdate: 0
        },
//			computed: {
//				// 一个计算属性的 getter
//				tds: function () {
//					var myr="";
//					$.getJSON("/main/getMonitor", {"beginDate": getTheDate(-2),"endDate": getTheDate(0)}, function (result) {
//						myr= result;
//					});
//					return myr;
//				}
//			},
        methods: {
            rerun: function (index, monitor_id) {
                var button = $('#trs').children().eq(index).children().eq(9).children().eq(0);
                button.prop('disabled', true);
                button.html('重跑中<span class="dotting"></span>');
//                $.getJSON("http://m.o2.qq.com/Api/rerunMonitor", {"monitorID": monitor_id}, function (result) {
//                    console.log(result);
//                    vm.isupdate=(this.isupdate==0?1:0);
//                    button.html('重跑');
//                    button.prop('disabled', false);
//                });
                $.ajax({
                    url: "http://m.o2.qq.com/Api/rerunMonitor",
                    // The name of the callback parameter, as specified by the YQL service
                    jsonp: "callback",
                    // Tell jQuery we're expecting JSONP
                    dataType: "jsonp",
                    // Tell YQL what we want and that we want JSON
                    data: {
                        monitorID: monitor_id
                    },
                    // Work with the response
                    success: function (response) {
                        console.log(response); // server response
                        vm.isupdate = (vm.isupdate == 0 ? 1 : 0);
                        button.html('重跑');
                        button.prop('disabled', false);
                    }
                });
            }
        }
    })

    vm.$watch('start', function (val) {
        $.getJSON("/main/getMonitor", {"beginDate": val, "endDate": this.end}, function (result) {
            vm.tds = result;
        });
    })

    vm.$watch('end', function (val) {
        $.getJSON("/main/getMonitor", {"beginDate": this.start, "endDate": val}, function (result) {
            vm.tds = result;
        });
    })

    vm.$watch('isupdate', function (val) {
        $.getJSON("/main/getMonitor", {"beginDate": this.start, "endDate": this.end}, function (result) {
            vm.tds = result;
        });
    })

    vm.$watch('tds',function(val){
        vm.$nextTick(function() {
            initTableCheckbox();
        });
    })

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值