vuex + watch = 监听组件渲染状态

我们常常有这样的需求,在某组件渲染完成后,才能进行数据请求,请求与这个值有关。
首先想到的是,在mounted里面执行

created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。

mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。

经过试验发现:页面已经渲染,子组件还没渲染出来,所以mounted不能满足要求。

后来求助大神+度娘,终于找到了一个可靠的解决方案!!!
vuex + watch (vueX全局状态管理,watch是对vue中变量的监听)

步骤是这样的,在vuex中定义一个变量来保存组件渲染的状态,默认组件未渲染。

state: {
    isFinish:false,//组件渲染的状态
  },
mutations: {
    SET_IS_FINISH(state, isFinish) {//组件状态修改的全局方法
      state.isFinish = isFinish;
    },
  },
//由于组件绑定了值,当值存在的时候,组件就已渲染完成。所以,在组件的某个方法内,一定会设置这个值为true;
  beforeDestroy:function(){
    this.$store.commit(‘SET_IS_FINISH‘, false);
  }

  如果这个组件在多处使用,一定要在页面注销的时候,把状态改回去,这样watch监听才有效果。

在使用组件的页面上,监听这个状态,当值为true时,该组件渲染完成。此时在进行页面请求,就准确无误了!

computed:{
        myfinish(){
          return this.$store.state.isFinish;
        },
    },
watch:{
      myfinish(newVal,oldVal){
  //在这里,组件已渲染完成,既可以对dom进行操作,也可以进行组件渲染完成后的数据请求。
      },
    },

这样就完美的实现了我们想要的效果,由于必须要等待组件渲染的结果,用它来请求数据。
VUEX + watch 是一个非常好的解决方案!!!

 

原文地址:https://www.cnblogs.com/CatcherLJ/p/11609333.html

时间: 2024-10-09 09:39:58

vuex + watch = 监听组件渲染状态的相关文章

angular指令监听ng-repeat渲染完成后执行自定义事件方法

今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令. 在ng-repeat模板实例内部会暴露出一些特殊属性$index/$first/$middle/$last/$odd/$even,$index会随着每次遍历(从0开始)递增,当遍历到最后一个时,$last的值为true,所以可以通过判断$last的值来监听ng-repeat的执行状态, 怎么在遍历过程中拿到$last的值:自定义指令 v

android86 监听SD卡状态,勒索软件,监听应用的安装、卸载、更新,无序广播有序广播

* 添加权限 <uses-permission android:name="android.permission.RECEIVE_SMS"/> * 4.0以后广播接收者安装以后必须手动启动一次,否则不生效 * 4.0以后广播接收者如果被手动关闭,就不会再启动了 ------------------------------------------------------------------------ #监听SD卡状态 * 清单文件中定义广播接收者接收的类型,监听SD卡常

利用angular指令监听ng-repeat渲染完成后执行脚本

业务中有时需要在异步获取数据并用ng-repeat遍历渲染完页面后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己动手写.有经验的同学都应该知道,在ng-repeat模板实例内部会暴露出一些特殊属性$index/$first/$middle/$last/$odd/$even,$index会随着每次遍历(从0开始)递增,当遍历到最后一个时,$last的值为true,so,通过判断$last的值来监听ng-repeat的执行状态,怎么在遍历过程中拿到$la

Android获取手机状态和监听手机来电状态

获取手机状态: import android.content.Context; import android.telephony.TelephonyManager; //获得相应的系统服务 TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); /** * 返回电话状态 * * CALL_STATE_IDLE 无任何状态时 * CALL_STATE_OFFHOOK 接起电话时 *

实时监听组件中路由的变化

实时监听组件中路由的变化,通过watch来进行监听,当路由发生变化时,重新赋值,重新执行从后台获取数据的操作 watch: { '$route' (to, from) { this.listQuery.keywords=this.$route.query.keywords this.searchByKeywords() } }, methods: { searchByKeywords() { this.$store.dispatch('updateLoading', true) fetchSea

广播小案例-监听系统网络状态 --Android开发

本例通过广播实现简单的监听系统网络状态改变的小案例. 1.案例效果演示 当手机连网后,系统提示“已连接网络”, 当手机断网后,系统提示“当前网络不可用1”. 2.案例实现 在主活动中动态注册广播,然后写一个内部类来接收系统广播,下面是相关文件的核心代码: MainActivity.java: public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private Networ

12.vue属性.监听.组件

1.计算属性 https://cn.vuejs.org/v2/guide/computed.html new Vue({ computed:{//定义 show(){ } } }) ++计算属性1.html:++ <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script src="vue.js&

angular监听dom渲染完成,判断ng-repeat循环完成

一.前言 最近做了一个图片懒加载的小插件,功能需要dom渲染完成后,好获取那些需要懒加载的dom元素.那么问题来了,如果只是感知静态的dom用ready,onload都可以,但项目用的angular,ng-repeat什么时候循环完,或者说angular自身的生命周期中dom渲染完成怎么知道,这里做个解决问题的记录. 二.网上流传的解决方案 1.data-ng-init---无效 大概意思是,给你需要监听的dom,比如body添加一个data-ng-init属性,绑定你需要在body加载完成后执

iOS7_关于UISwitch_02_如何自定义UISwitch_如何设定UISwitch的默认开关状态_如何监听 Switch开关状态

前言 上一篇博文,我们介绍了一下如何实现 UISwitch ,我们这次介绍下如何自定义 UISwitch. 原文连接:http://www.cnblogs.com/LeoYoung/p/qq907596253.html 正文 1.我们先在界面上实现一个 UISwitch. a>在 控制器.m 文件中,添加一个UISwitch的属性. 1 @interface moboViewController () 2 @property (nonatomic, strong) UISwitch *mainS