自定義vue必填驗證指令
阿新 • • 發佈:2020-10-21
//vue指定取值 用的 var _VUECOMMON = { getValue:function($this,json,attrName){ let r=""; if(json && attrName) { r = json[attrName]; }else{ //因為取vue Data第一級的資料,獲取不到,只能用這樣的方式來取 r=$this[attrName]; } return r; }, setValue:function(vnode,json,attrName,val){ if(json && attrName){ json[attrName] = val; }else{ //因為取vue Data第一級的資料,獲取不到,只能用這樣的方式來取 $this[attrName] = val; } }, } //====================================vue必填驗證指令開始====================================2020-10-21 !function ($vue) { //驗證指令使用說明(這個指令一定要放在vue.warning後面,因該指令用到了vue.warning來提示) //最簡單的引用:v-required="{model:obj,attr:'userName'}" //最推薦的引用:v-required="{model:obj,attr:'userName',field:'使用者名稱'}"//最全引數引用:v-required="{model:obj,attr:'userName',msg:'使用者姓名為必填項',ref:'userName',callback:'backFunName',requiredfun:'funName',}" //呼叫驗證方法:if(this.checkRequired(this)){//驗證通過可以進行儲存} //引數說明 // model:obj,//Data中的Model變數名,如果直接Data第一級可以不帶該引數 // attr:'userName',//Model變數的屬性名,(必填引數) // field:'User Name',//focus時提示的欄位名稱 // msg:'custom msg ',//focus時自定義提示的文字,(當指定了該引數,field無效)// ref:'refIdName',//當自定義元件時,指定了Ref時使用,如輸入提示元件<multiselect ref="refIdName"> // callback:'backFunName',//當得到焦點focus()以後呼叫該方法 // requiredfun:'funName',//必填條件判斷方法,該方法必須返回Boolean值,當得條件滿足才進行必填驗證,否則跳過 $vue.directive('required', { bind: function (el, binding, vnode) { if (Vue.prototype._requiredList) { Vue.prototype._requiredList.push({"el": el, "binding": binding, "vnode": vnode}) } else { Vue.prototype._requiredList = [{"el": el, "binding": binding, "vnode": vnode}]; } } }); Vue.prototype.checkRequired = function ($this) { //console.log($vue._requiredList) let arr = $this._requiredList; for (let i in arr) { var item = arr[i]; var option = item.binding.value || {};//引數 var modelValue = _VUECOMMON.getValue($this, option.model, option.attr);//得到值 var isRequired = true;//是否需要必填判定 if (option.requiredfun && typeof (option.requiredfun) == "function") { isRequired = option.requiredfun(); } if (isRequired && (modelValue == null || modelValue == '')) { if (item.binding.ref) { this.$refs[ref].focus(); } else { item.el.focus(); } if (option.msg) { this.warning(option.msg); } else if (option.field) { this.warning(option.field + ' is required'); } else { this.warning('This is required'); } //回撥函式 if (typeof (option.callback) === 'function') { option.callback(item.el, modelValue); } return false; } } return true;//如果驗證全通過返回true } }(Vue); //====================================vue必填驗證指令結束====================================