vue自动触发事件

vue自动触发事件,第1张

项目中进入页面 先请求后台渲染一个列表,然后点击每个列表过后,再次请求后台加载该列表项下面的子列表,类似异步加载树行结构数据

现在效果已经实现,但是需求需要当页面进入的时候,就要把第一个列表项的第一个节点默认打开,方案有2种

再请求完成初始列表后,携带父列表里面相关的参数,接着发起下一级的请求,该方案适合只有2级的情况,用自定义指令可以实现多级的触发

参考文献 >

Buttondemo组件

一、Button组件根元素是button

当我们点击Buttondemo组件click事件时候,正常情况下,点击完就会将事件传入到Button组件中根元素button上。这时我们点击打印出“hi”

但是如果Button组件根元素不是button,而是div时候,这个时候事件是传入div上,而不是button元素上。

二、Button组件根元素是div

当我们点击Buttondemo组件click事件时候,点击完就会将事件传入到Button组件中根元素div上,这时只要我们点击这个div边框之内都能触发click事件。

三、如何让根元素div里面button触发click事件,

(1)、首先让div不要继承click属性: inheritAttrs:false

(2)、让div里的button绑定事件: v-bind=$attrs $attrs是指所有事件

四、当有多个事件属性传入,如何自主放置在不同元素进行触发

(1)、利用contextattrs获取所有属性

(2)、利用ES6析构函数{size,focus,mouseover,click}=contextattrs

(3)、再在不同元素上绑定上面size或focus等

Buttondemo组件

Button组件

ref可以绑定dom节点或字组件,用于获取子组件的方法和属性。但是只有组件 完成渲染 时,才可以获取得到,且$refs也不是响应式的!

响应式处理可以包括以下几种方法:也就是说,在子组件完成渲染以后,动态修改的data或method,在父组件都可以实时获取。

(1)使用nexttick();子组件 同步 更改数据可反映到父组件上,nexttick属于微任务,也就是说,在本轮事件循环完成之前,可以执行异步 *** 作,从而保证实时性。

(2)如果子组件数据更新是异步,比如说从接口请求回来的这种,使用nexttick,甚至settimeout(()=>{},0) 都无法读取到已经修改的data,因为在消息队列里面,异步任务作为宏任务始终排在队尾。常发生的情况是,接口请求的数据还没到,父组件中已经读取了refs[componets]xxx的数据,这会导致这个数据打印出来是undefined。

解决办法是:

>>>settimeout(100ms)的等待,这种方法虽然可以解决,但是非常不好,原因是你无法控制接口要多少秒才能到达响应结果

打印结果:

由此可见 settimeout 0 会在接口响应前执行。

>>> 使用回调的方式。接口响应完,在then里,通过$emit触发父组件获取refs的方法。这种回调必然可以保证数据已经set到,再次手动获取,即可得到响应值。

(3)以上分别用于解决子组件同步和异步的问题,但如果子组件使用v-if(资料发现v-for同样会有这种问题),子组件未被渲染,同样会出现$refs无法读取的问题。暴力解决法是,v-if换成v-show。区别在于:v-show不会发生重拍,只是display:none。这种方式虽然可以保证 $refs获取到子组件的数据,但在某些特定的业务场景下(比如子组件请求必须在父组件完成某 *** 作的时候进行),会导致一些逻辑错误。因此合理的解决办法是,用(2)中回调的方法。

其他解决办法待更新

前面讲过通过props子组件很容易就可以获取到父组件的数据,但是父组件怎么获取子组件的数据呢?通过查资料,发现可以通过自定义事件来实现父组件与子组件之间的通信。

首先,得创建一个子组件模板文件,子组件在父组件中用的时候,总得有个触发动作可以获取到子组件的数据吧,所以,加个按钮,触发个动作。如下所示:

Appvue

本文是 Vue实战 系列的第六篇文章,主要介绍Falcon项目中通用 Table 组件的开发和使用 。Falcon项目地址: >

el-input id = "usernames" v-model="formusername" v-bind:style = {"disabled:isDisabled"}></el-input>

data(){

return{

isDisabled:true

}

}

后来又想到使用jquery来改变属性,但是这个也没用

$(document)ready(function(){

$('submitButton')hide();

$('reviseButton')click(function () {

$(this)hide();

$('submitButton')show();

$('#username')attr("disabled",true);

$('#qq')addAttr("disabled");

以上就是关于vue自动触发事件全部的内容,包括:vue自动触发事件、(Vue -05) v-model指令 + 绑定事件 + 深度响应式、Vue 事件属性绑定默认和修改等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9449549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存