11月项目总结

43 阅读3分钟

1、父-->子-->父。 父获子:this.refs.hello.属性(方法)子获父:this.refs.hello.属性(方法) 子获父: this.parent.属性 注:有些反复在子请求的数据尽量放在父去请求回来,然后再传给子。

2、table中如需要弹提示框:show-overflow-tooltip。 3、标签页el-tab-pane中如需要弹(文字提示):<el-tooltip effect="dark":content="item.ruleName" placement="top-start" slot="label">。

3、:before-leave="beforeLeaveTab" 切换标签之前的钩子,若返回 false 或者返回 Promise 且被 reject,则阻止切换。 Function(activeName, oldActiveName)

4、table中涉及排序要前后端都排的话要用到@sort-change="sortChange"方法传参数给后端。

5、分页的排序只前端的话只会当前页排序(sortable: true )。 6、table表格固定高度滚动条 max-height

7、|| 与 ??的区别: (1)|| : ''、0、undefined、null; (2)?? :undefined、null;(但如果涉及运算或0 的时候建议用?? let i = 0 i = i ?? 12 (如果用i || 12 的话会一直都是false)

8、路由方式在浏览器新标签页打开: const newpage = this.$router.resolve({ name: 'AddTask', query: { type: 'add' } }) window.open(newpage.href, '_blank')

9、尽量不用a标签,一般用router-link

10、某个方法中如果使用了return的话,当调用该方法的时候要使用await fn()

11、使用this.$$nextTick(() => {this.a = b}) 的写法可以简化为 : await this.$nextTick() this.a = b

12、用到_transform转换url参数的 用于get/delete

13、对数据的处理:一般通过父组件传给子组件的数据,在子组件要深复制一份copyObj(data)

14、假如数据保存没有起作用则要用到promise

15、String 与to String()的区别? (1)同:String()和to String()都是将其他类型的变量转换为字符串类型。 (2)区别:toString()无法转换null和undefined

16、样式问题:如果修改了某个ui组件的样式不起作用可以用/deep/ .a

17、return 语句的作用是指定函数返回的值,return语句只能出现在函数体中。 (1)用return语句来终止一个函数的执行。 (2)如果return后面不返回值,则把值undefined赋给调用当前函数的表达式。 (3)return语句一般用法: a.返回函数结果:return a; b.阻止默认事件或者阻止往下执行:return false; 例如: a、在没有函数体包含的for循环中使用return 是会报错的:for(var i=0;i<4;i++){return 3;} (报错) b、在有函数体中使用:function fn(){ for(var i=0;i<4;i++){return 5;} } (5)

18、continue与break (1)continue用于跳出本次循环; (2)break用于跳出整个循环。

19、// 触发更新视图 this.set(arr[0],'a',1) arr[0].a=1 showDetail (index) { this.set(this.taskList[index], 'dialogVisible', true) }, 改变list set把深的强行赋值,可以触发更新视图。(1)应用场景:为data中的某一个对象添加一个属性,但是视图层并没有更新数据。(2)原因:由于受JavaScript的限制,vue.js不能监听对象属性的添加和删除,因为在vue组件初始化的过程中,会调用gettersetter方法,所以该属性必须是存在在data中,视图层才会响应该数据的变化。(3)解决办法:a.this.set把深的强行赋值,可以触发更新视图。 (1)应用场景:为data中的某一个对象添加一个属性,但是视图层并没有更新数据。 (2)原因:由于受JavaScript的限制,vue.js不能监听对象属性的添加和删除, 因为在vue组件初始化的过程中,会调用getter和setter方法, 所以该属性必须是存在在data中,视图层才会响应该数据的变化。 (3)解决办法: a. this.set(obj,key,value) / vue.set(obj,key,value) b. 通过Object.assign(target, sources)方法,例: this.student.age=15 this.student = Object.assign({}, this.student)

20、form表单:show-message是否显示校验错误信息 21、 时间选择器: (1) popper-class="creativity-picker"修改样式 creativity-picker .el-button--text{ display: none !important; 去掉立刻按钮 } (2):picker-options="pickerOptions" 方法:例如禁掉之前的日期可写在这个方法里。

22、includes()方法:用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。 例如:arr=[1,2,3] arr.includes(2)? 1:2

23、路由传参:this.$route.query.targetPriceId, // 路由传来的id

24、forEach、map、filter、some、find、findIndex、reduce (1)forEach遍历,没有返回值;

(2)map:遍历,最适合做的是映射,有返回值;

(3)filter:筛选出符合条件的item,返回一个新的数组,不会改变原数组;

(4)some: 只要找到一个符合条件的,就回来报告true, 因此并不会全部遍历,不做多余的活(性能优良);

(5)find:返回第一个符合条件的对象item;

(6)findIndex: 返回第一个符合条件的索引值(序号);

(7)reduce: 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。 arr.reduce(function(pre,cur,index,arr){.....}, init); arr 表示原数组; prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1; init 表示初始值。 var reduceList = [1,2,3,4,2]
a、递归累加:数组求和,求乘积了; const sum = reduceList.reduce((pre,cur) => { return pre+cur },0) //sum = 12 b、计算数组中每个元素出现的次数: const times = reduceList.reduce((pre,cur) => { if(cur in pre){ pre[cur]++ }else{ pre[cur]=1 } return pre },{}) // times = {1:1, 2:2, 3:1, 4:1} {}数组转对象 c、数组去重: (数组转数组) (1) const arr = reduceList.reduce((pre,cur) => { if( !pre.includes(cur) ){ return pre.concat(cur) }else{ return pre } },[]) // arr=[1,2,3,4]

(2)const arr = reduceList.reduce((pre,cur) => { pre.indexOf(cur) === -1 && pre.push(cur) return pre },[])