以前回答过关于vue和iview使用的一些问题,偶尔又会有人再次问到,在以前的回答中去找太麻烦。
因而之后相关问题就概括在这里啦。
一、 使用渲染函数渲染iview组件,如select时,添加on-change无效。
由于select中事件不是change,是on-change,因此应该是以下:vue
return createElement( 'Select', { on: { on-change: () => { //这里的key是on-change,不是change } } }
二、在表单中使用iview Select或者其余的value类型为number时,校验是否为空。明明有值,确没法校验经过。git
这是由于iview使用async-validator: https://github.com/yiminghe/a...。github
默认校验数据类型为string,然而select的value为number。因此应该修改rulesvue-router
ruleValidate:{ building: [ { type: 'number', required: true, message: '必须选择楼宇', trigger: 'change' } ] }
三、 在modal中使用form,添加了表单校验,然而还想要有button的loading。loading默认设为false,那么不校验了,默认为true时,校验不经过会有loading效果,那么校验不经过时设置loading为false呢。那么下一次编辑不校验了。。。咱们经过以下的代码,设置每次校验完成从新设置loading为true解决(有点绕,遇到问题的时候,自会明白)浏览器
this.$nextTick(() => { this.loading = true; });
四、父组件传递props给子组件,props为array或object引用类型时,改变此引用类型,子组件不更新。iview
这个和vue的响应式有关,咱们正确的作法是调用vue示例的set方法,以下所示:async
Vue.set(vm.someObject, 'b', 2) this.$set(this.someObject,'b',2) //全局Vue.set方法的别名
五、A页面滚动到底部,路由从A页面跳转到B页面,B页面默认不在顶部,即滚动条没有置顶。
采用vue-router中的scrollBehavior函数
//第三个参数 savedPosition 当且仅当 popstate 导航 (经过浏览器的 前进/后退 按钮触发) 时才可用。 const router = new VueRouter({ routes: [...], scrollBehavior (to, from, savedPosition) { if (savedPosition) { return savedPosition } else { return { x: 0, y: 0 } } } })
六、vue中高亮搜索关键字ui
highlightSearchKeyword(val, keyword) { if (val.indexOf(keyword) > -1 && keyword !== '') { let reg = new RegExp(keyword , 'g'); return val.replace(reg, '<span style="color: #ff4040">' + keyword + '</span>'); } else { return val; } }