最近总结7.1-7.19

1.如何使用git提交代码

首先添加所有,然后提交我的描述 再push进去 push完事后切换主分支pull拉取我个人分支的内容,再切换到我自己的分支取merge合并我的分支。有冲突解决冲突。

$ git add .

$ git config --global core.autocrlf true


$ git commit -m '告警外发'

$ git push

$ git checkout master

$ git pull 

$ git checkout baiyun

$ git merge master

$ git push
//有冲突去解决冲突再push
$ git add .


$ git commit -m '解决冲突'

$ git push 

2.nextTick的时使用

(1).语法:this.$nextTick(回调函数)
(2).作用:在下一次DOM更新结束后执行其指定的回调。
(3).什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行。

nexttick使用场景

vue中的nextTick主要用于处理数据动态变化后,DOM还未及时更新的问题,用nextTick就可以获取数据更新后最新DOM的变化

适用场景:
第一种:有时需要根据数据动态的为页面某些dom元素添加事件,这就要求在dom元素渲染完毕时去设置,但是created与mounted函数执行时一般dom并没有渲染完毕,所以就会出现获取不到,添加不了事件的问题,这回就要用到nextTick处理


第二种:在使用某个第三方插件时 ,希望在vue生成的某些dom动态发生变化时重新应用该插件,也会用到该方法,这时候就需要在 $nextTick 的回调函数中执行重新应用插件的方法,例如:应用滚动插件better-scroll时
 

第三种:数据改变后获取焦点

何为$nextTick

因为Vue的异步更新队列,$nextTick是用来知道什么时候DOM更新完成的。
详细解读:

我们先来看这样一个场景:有一个div,默认用 v-if 将它隐藏,点击一个按钮后,改变 v-if 的值,让它显示出来,同时拿到这个div的文本内容。如果v-if的值是 false,直接去获取div内容是获取不到的,因为此时div还没有被创建出来,那么应该在点击按钮后,改变v-if的值为 true,div才会被创建,此时再去获取,

handleEdit(todo) {
            if (todo.hasOwnProperty('isEdit')) {
                todo.isEdit = true //绑定了一个input输入框的是否可见性,即如果=true,输入框才可见
            } else {
                this.$set(todo, 'isEdit', true) //设置isEdit为true(即input框可见)
            }            
            // nextTick指定的结点会在Dom更新之后执行
            this.$nextTick(function (){
                this.$refs.inputTitle.focus() //是该输入框获取焦点
            })
        },

我们想要实现的效果是:输入框一可见就获取焦点。如果我们直接写this.$refs.inputTitle.focus()不在外面嵌套$nextTick,就会出错,这是因为:Vue是在执行完这个函数之后再判断数据发生了变化,重新渲染模板,也就是说函数执行完之后input框才可见,而添加焦点是在函数中执行,即没有input框就进行获取焦点,这显然是不可以的。所以vue为我们提供了nextTick方法,nextTick方法中的函数会在VUE渲染完页面之后再执行,这样就可以正常获取焦点了。

=======================================================================

简而言之:

1.获取数据更新之后的DOM

2.created()中进行DOM操作

3.获取元素宽度

在vue的生命周期 created() 钩子函数中进行 dom 操作,一定要放在 $nextTick() 函数中执行。在 created() 钩子函数执行的时候 DOM 其实并未进行任何渲染,而此时进行 DOM 操作无异于徒劳,所以此处一定要将 DOM 操作的代码放进 nextTick() 的回调函数中。
mounted() 钩子函数,因为该钩子函数执行时,所有的 DOM 挂载和 渲染都已完成,此时在该钩子函数中进行任何 DOM 操作都不会有问题
在数据变化后要执行某个操作,而这个操作需要随数据改变而改变DOM结构时,这个操作都是需要放置 $nextTick() 的回调函数中。
 

原理

我们修改一个属性的时候   通过$refs获取dom或组件的时候,拿到的值是没有更新过的  因为在vue中 dom渲染是异步执行的  也就是我们还没拿值的时候dom还没有更呐!

所以啊 官方为我们提供了 $nextTick方法  原理就是 在DOM更新完成后执行回调函数  

1、异步说明

1) vue是异步执行dom更新的,一旦观察到数据变化,vue就会开启一个队列,然后把在同一事件循环当中观察到数据变化的watcher推送进这个队列,如果这个watcher被触发多次,只会被推送到队列一次,这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和dom操作,这样可以提高渲染效率。

2) 如果要获取更新后的dom元素,可以使用vue内置的$nextTick方法,参数是一个函数;它的作用类似setTimeout,进行执行异步的操作。

2、事件循环说明

vue中的nextTick主要用于处理数据动态变化后,DOM还未及时更新的问题,用nextTick可以获取数据更新后最新dom的变化。

this.$refs()常和nextTick()一起用,例如:

(114条消息) vue中$refs 和 $nextTick的基本使用_奥特曼 的博客-CSDN博客

比如项目中的哪里需要用到,为什么第二次不渲染,如实习项目中告警外发的

1.有时需要根据数据动态的为页面某些dom元素添加事件,这就要求在dom元素渲染完毕时去设置,但是created与mounted函数执行时一般dom并没有渲染完毕,所以就会出现获取不到,添加不了事件的问题,这就要用到nextTick处理

2.有一个div,默认用 v-if 将它隐藏,点击一个按钮后,改变 v-if 的值,让它显示出来,同时拿到这个div的文本内容。如果v-if的值是 false,直接去获取div内容是获取不到的,因为此时div还没有被创建出来,那么应该在点击按钮后,改变v-if的值为 true,div才会被创建,此时再去获取.

vue在观察到数据变化时并不是直接更新DOM,而是开启一个队列,并缓冲在同一个事件循环中发生的所以数据改变。在缓冲时会去除重复数据,从而避免不必要的计算和DOM操作。然后,在下一个事件循环tick中,Vue刷新队列并执行实际(已去重的)工作。所以如果你用一个for循环来动态改变数据100次,其实它只会应用最后一次改变,如果没有这种机制,DOM就要重绘100次,这固然是一个很大的开销。

Vue会根据当前浏览器环境优先使用原生的Promise.then和MutationObserver,如果都不支持,就会采用setTimeout代替。

知道了Vue异步更新DOM的原理,就理解了。事实上,在执行this.showDiv = true时,div仍然还是没有被创建出来,直到下一个vue事件循环时,才开始创建。$nextTick就是用来知道什么时候DOM更新完成的,不加的话就会报错。

<div id="app">
<div id="div" v-if="showDiv">这是一段文本</div>
    <button @click="getText">获取div内容</button>
</div>
<script>
var app = new Vue({
    el : "#app",
    data:{
        showDiv : false
    },
    methods:{
        getText:function(){
            this.showDiv = true;
            this.$nextTick(function(){
                  var text = document.getElementById('div').innnerHTML;
                 console.log(text);  
            });
        }
    }
})
</script>

我们修改一个属性的时候   通过$refs获取dom或组件的时候,拿到的值是没有更新过的  因为在vue中 dom渲染是异步执行的  也就是我们还没拿值的时候dom还没有更呐!

所以啊 官方为我们提供了 $nextTick方法  原理就是 在DOM更新完成后执行回调函数  

3.keeplive的使用 keeplive 用active和actived一块用

使用原则:当我们在某些场景下不需要让页面重新加载时我们可以使用keep-alive

举个栗子:

当我们从首页–>列表页–>商详页–>再返回,这时候列表页应该是需要keep-alive

从首页–>列表页–>商详页–>返回到列表页(需要缓存)–>返回到首页(需要缓存)–>再次进入列表页(不需要缓存),这时候可以按需来控制页面的keep-alive



设置了 keep-alive 缓存的组件,会多出两个生命周期钩子(activated与deactivated):

首次进入组件时:beforeRouteEnter > beforeCreate > created> mounted > activated > … … > beforeRouteLeave > deactivated
再次进入组件时:beforeRouteEnter >activated > … … > beforeRouteLeave > deactivated



缓存后如何获取数据
解决方案可以有以下两种:

beforeRouteEnter
actived



keepalive是给页面设置缓存,避免每一次进入页面都请求数据,可以很好的减少服务器压力,主要场景用于 列表页进入详情页,并且列表页传递给详情页的参数和上一次传递的参数没有变化, 那具体怎么使用呢,
首先:
在router.js中配置当前路由的里边设置 meta: { keepAlive: true },APP.vue设置
这样这个页面就设置好缓存了。
如果之后这样简单 的设置的话会导致每次进入页面都不会请求数据,数据得不到更新,所以vue有一个专门配合keepAlive使用的 activated(),
页面设置keepAlive缓存后,在页面中activated()的代码可以生效,进入详情页必定会传递一个id的唯一标识,然后变量存储,可以在actived里边判断父级页面传值是否和存储的值一致,然后根据判断如果不一样就继续请求接口

4.computed 和watch和methods的使用 搞清楚项目那个怎么实现的!!!3个方法

method:一般用于事件处理函数方法调用

compute:一般用于属性的计算

watch:主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作

区别

1.methods中没有缓存机制,页面中调用了多少次就要执行多少次

2.compute中有缓存机制,当依赖没有发生变化时,页面中使用多次只用执行一次,当依赖发生变化时,才会重新执行

3.watch中也没有缓存机制,观察某一个属性的变化,重新计算属性的值

4.compute更适合用于多个属性同时影响一个属性的多对一情况,watch更适合用于一个属性影响多个属性的一对多的情况

总结
watch是观察某一个属性的变化,重新计算属性值,computed是通过所伊拉德属性变化重新计算属性值。

大部分情况下watch和computed几乎没有差别。但是如果要在数据变化的同时进行异步操作或者是比较大的开销,那么watch为最佳选择

methods则作为函数调用以及事件处理函数

Computed:

当我们需要进行数值计算,并且依赖于其它数据时,应该使用 computed,因为可以利用 computed 的缓存特性,避免每次获取值时,都要重新计算;
computed擅长处理的场景:一个数据受多个数据影响,如购物车计算价格

Watch:

当我们需要在数据变化时执行异步或开销较大的操作时,应该使用 watch,使用watch选项允许我们执行异步操作。这些都是计算属性无法做到的。
watch擅长处理的场景:一个数据影响多个数据,如搜索数据

watch:一条数据变化影响多条数据变化

举例:费用应收总计受多条应收数据变化而变化

 watch:一条数据变化影响多条数据变化

举例:当时间变化,表格的表头时间也跟着变化。

然后我们可能有其他的计算属性依赖于 A ,这时候,我们就需要缓存。也就是使用 computed 而不是 methods。但对于每次都需要进行重新计算的属性比如下面这个函数的返回值 function () { return Date.now() } ,我们最好使用 methods。
总之:数据量大,需要缓存的时候用 computed ;每次确实需要重新加载,不需要缓存时用 methods 。
 

5.tabs栏的使用 渲染不同的页面

 

 

6.代码的封装

 

 

7.if else 的嵌套问题

多层嵌套有时候会不好使,所以else if()要写全,写明白

8.watch监听获取客户端

watch: { componentsKey: {

immediate: true,

handler(newKey) {

this.handleComponentsKeyChange(newKey); }, }, },

methods: {

handleComponentsKeyChange(key) {

if (key === "alarm") {

this.form = { name: "", description: "", type: "", clientIds: [], };

} else if (key === "rsyslog") {

this.form = { name: "", host: "", port: "", protocol: "", ident: "", facility: "", };

} else if (key === "kafka") {

this.form = { name: "", servers: "", topics: "", };

} else if (key === "file") {

this.form = { filePath: "", }; }

console.log(this.form); }, }

9.不同的form渲染 提交不同的新增内容

使用父子组件props传值 传递components的值,再在子组件props接收

 

 

 

10.get post 请求

post请求的请求参数是不会跟在url后面的,get请求才会跟在后面,所以大家才说post请求比get请求安全。

POST和GET请求都是向服务器提交数据,并且都会从服务器获取数据。
区别:
传送方式:GET通过浏览器的地址栏进行传输,POST通过报文传输。

传送长度:GET参数有长度限制(受限于url长度),而POST无限制。

从浏览器发送的数据包:GET产生一个数据包,而POST则产生两个数据包;
对于GET的请求浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
对于POST的请求浏览器先发送header,服务器响应100 continue,浏览器再发送data,
服务器响应200 ok(返回数据)。

从耗时来看:因为POST请求需要两步,所以耗时高,而GET请求则相对耗时低,速度更快。

从安全性来看:因为GET传输数据是通过URL请求,以字段=value的形式,置于URL后,并用?连接,这个过程用户是可见的,可能会泄露用户的私密信息,如账号密码等。
所以不安全,而POST传输数据通过HTTP的POST机制,将字段与对应值存在请求实体
中发送给服务器,这个过程对用户是不可见的。相对GET来说安全性高些。

从支持的字符集来看:GET方式只能支持ASCII字符,向服务器传的中文字符可能会乱码,POST支持标准字符集,可以正确传递中文字符
 

11.使用echarts

选择哪种渲染器

一般来说,Canvas 更适合绘制图形元素数量较多(这一般是由数据量大导致)的图表(如热力图、地理坐标系或平行坐标系上的大规模线图或散点图等),也利于实现某些视觉 特效。但是,在不少场景中,SVG 具有重要的优势:它的内存占用更低(这对移动端尤其重要)、并且用户使用浏览器内置的缩放功能时不会模糊。

选择哪种渲染器,我们可以根据软硬件环境、数据量、功能需求综合考虑。

  • 在软硬件环境较好,数据量不大的场景下,两种渲染器都可以适用,并不需要太多纠结。
  • 在环境较差,出现性能问题需要优化的场景下,可以通过试验来确定使用哪种渲染器。比如有这些经验:
    • 在需要创建很多 ECharts 实例且浏览器易崩溃的情况下(可能是因为 Canvas 数量多导致内存占用超出手机承受能力),可以使用 SVG 渲染器来进行改善。大略的说,如果图表运行在低端安卓机,或者我们在使用一些特定图表如 水球图 等,SVG 渲染器可能效果更好。
    • 数据量较大(经验判断 > 1k)、较多交互时,建议选择 Canvas 渲染器。
  • 12.v-for知识点

注意:不推荐v-for和v-if同时用在同一个元素上。因当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级。这意味着 v-if 将分别重复运行于每个 v-for 循环中。

 

  • 13.数组字符串互换

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值