目前,項目中使用了純前端的靜態項目+RESTFul接口的模式。為了更好的對數據進行操作,前端使用了vue2的mvvm功能,但是由于不是單頁面應用,所以,并沒有涉及到其它的如vue-route等功能,也未使用webpack等編譯功能,所以,也沒有使用.vue文件功能。這時候,如果用到控件,則多數從原jquery的組件中選擇。
select下拉搜索選擇
這次的需求調研與設計是原來做winform開發的同事,由于用慣了devexpress這個控件庫,所以,對于searchlookupeditor這個控件情有獨鐘,所以,在設計的時候,許多地方都用到。
最初實現
最初,我使用了select2綁定select標簽,設定其change事件 ,在事件中修改對應的vue的data值,同時,在vue中設定watch``data中被綁定的屬性,屬性值發生變化,則修改對應的dom的val,然后再觸發select2的change事件。當然,這種對應關系,我在select標簽上放了一個data-vuep來保存其與vue屬性的對應關系,并放在全局的select2vue和dom2vue中。
//mounted中的部分代碼 select2vue = {}; $("select").each(function (index, item) { var s2 = $(item).select2({ language: "zh-CN", //設置 提示語言 width: "100%", //設置下拉框的寬度 theme: "classic", placeholder: "請選擇" }).on("change", function (e) { console.log(e); var v = $(e.target).val(); var p = $(e.target).attr("data-vuep"); eval("vue_cust_busi." + p + "='" + v + "';"); //$(e.target).find("option").attr("selected",false); //$(e.target).find("option[value='"+v+"']").attr("selected",true); }); var p = $(item).attr("data-vuep"); select2vue[p] = s2; dom2vue[p] = item; }); setTimeout(function(){ vue_cust_busi.editor.ID_CUST="3"; vue_cust_busi.editor.NAME_CUST="*有限責任公司"; console.log("修改"); },10,null);//watch中的部分代碼 "temp.P1": function (val) { fire(arguments.callee.name.toString(), val); },//通用函數 function fire(p, val) { $(dom2vue[p]).val(val); select2vue[p].trigger("change"); }//html <select data-vuep="editor.P1" class="form-control "> <option value="" ></option> <option v-for="yearOpt in yearOpts" v-bind:value="yearOpt">{{yearOpt}}</option> </select>為什么要用一個data-vuep來將數據與vue的屬性關聯呢,因為我發現,select2初始化了這個select標簽之后,修改這個標簽的值無法觸發修改vue對應的v-model的屬性。所以,只能用這個方法。
新聞熱點
疑難解答
圖片精選