当前位置: 首页 > Web前端 > JavaScript

vue3中什么时候封装成一个组件?什么时候封装成一条指令?让我通过例子告诉你(打字稿)

时间:2023-03-27 01:37:30 JavaScript

浠€涔堟椂鍊欏皝瑁呮垚缁勪欢锛熶粈涔堟椂鍊欏皝瑁呮垚鎸囦护锛熶竴鑸鏋滆灏佽鐨勪唬鐮佷腑鍖呭惈澶ч噺鐨凥TML锛屽氨闇€瑕佷娇鐢ㄧ粍浠躲€傜浉鍙嶏紝濡傛灉浣犲彧瀵规煇涓狣OM/缁勪欢鐨勬牴DOM杩涜鎿嶄綔锛岄偅涔堜綘鍙互閫夋嫨灏嗗叾灏佽鎴愪竴涓懡浠ゃ€傗€滄嫋鍔ㄢ€濈瓑鎵嬪娍鐨勮瘑鍒彧鏄瘑鍒煇涓厓绱?缁勪欢涓婄殑鈥滈紶鏍?瑙︽懜鈥濓紝涓嶆秹鍙奃OM鎿嶄綔锛屾墍浠ヨ繖閲岀殑灏佽閫夋嫨鈥滃懡浠も€濄€傛渶缁堢洰鏍囷紙v-touch鎸囦护锛夊厛鐪嬬洰鏍囷紝鍐嶅垎鏋愩€?/main.jsimportVTouchfrom'@any-touch/vue3';//...鐪佺暐constapp=createApp(App);app.mountd('#app');app.use(VTouch);鐢变簬鎴戜滑瑕佺敤app.use鍒濆鍖栵紝鎵€浠ラ渶瑕佸皝瑁呮垚vue鎻掍欢銆傛彃浠舵湁鍥烘湁鐨勬牸寮忥紝鍚庨潰鎴戜滑浼氬紑鍙戠紪鍐欍€傞渶瑕佹敮鎸佹墜鍔匡紝杩欓噷浣跨敤any-touch锛屼竴涓笉渚濊禆js鐨勬墜鍔胯瘑鍒簱銆傜煡璇嗙偣锛堭煔€灏忚创澹級鍦╲ue涓紝鍙互閫氳繃鈥淍鈥濊娉曠洿鎺ユ帴鏀惰嚜瀹氫箟DOM浜嬩欢锛屾墍浠ユ垜浠叾瀹炲彲浠ヨ嚜宸卞疄鐜颁换浣曗€渪x鈥濅簨浠讹紝鏈€缁堝彲浠ラ€氳繃鈥淍xx鈥濊繘琛岀洃鍚€俢onstevent=newEvent('xx');this.$refs.xxEl.dispatchEvent(event);鈥榓ny-touch鈥欏唴閮ㄨЕ鍙戠殑鎵嬪娍浜嬩欢閮芥槸瑙﹀彂鍘熺敓DOM浜嬩欢锛屾墍浠ue鍙互鐩存帴鐩戝惉锛屽氨鍍忊€淍tap鈥濈瓑銆傜紪鍐欐彃浠剁殑鏍煎紡銆倂ue鎻掍欢棣栧厛闇€瑕佹槸涓€涓璞★紝閲岄潰鍖呭惈涓€涓猭ey-valueinstall锛屽搴旂殑value鏄竴涓嚱鏁帮紝鍙傛暟鏄竴涓獀ue瀹炰緥銆傚氨鏄繖鏍凤細exportdefault{install:(app)=>{//logic},};缁勪欢涔熸湁鐢熷懡鍛ㄦ湡锛屾瘮濡俶ounted鍜寀nmounted锛屽垎鍒唬琛ㄦ寚浠ゆ墍鍦ㄥ厓绱犫€滃姞杞藉悗鎵ц鈥濆拰鈥滈攢姣佹椂鎵ц鈥濄€傝繖閲屾垜浠娇鐢ㄨ繖涓や釜閽╁瓙鏉ユ墽琛宎ny-touch鐨勫垵濮嬪寲鍜岄攢姣佲€嬧€嬨€傛帴涓嬫潵锛屾垜浠紑濮嬪皝瑁呪€渧-touch鈥濇寚浠ゃ€傛敞鎰忥細鎴戜滑鍦ㄤ唬鐮佷腑灏嗘寚浠ゅ懡鍚嶄负鈥渢ouch鈥濓紝浣嗘槸鍦ㄧ粍浠朵腑浣跨敤瀹冩椂锛岄渶瑕佸啓鈥渧-touch鈥濓紝浠モ€渧-鈥濆紑澶寸殑灞炴€э紝vue浼氱煡閬撹繖鏄竴鏉″懡浠ゃ€備粠鈥滀换鎰忚Е鎽糕€濆鍏Touch锛沜onstelAndAtMap=newWeakMap();exportdefault{install:(app)=>{app.directive('touch',{mounted(el){//鍒濆鍖朿onstat=newATouch(el);elAndAtMap.set(el,at);},unmounted(el:SupportElement){//閿€姣乪lAndAtMap.get(el).destroy();},});},};杩欓噷浣跨敤WeakMap鏉ュ瓨鍌ㄦ瘡娆′娇鐢ㄢ€渧-touch鈥濇椂浜х敓鐨勨€渁ny-touch鈥濆疄渚嬨€傚啓杩欎釜鍑芥暟灏卞畬鎴愪簡銆備絾鏄垜浠殑鐩爣鏄敤ts鍐欙紝璇风户缁線涓嬬湅銆傛墦瀛楃棣栧厛鎴戜滑闇€瑕佷粙缁嶅皢鐢ㄤ簬鏍囪鎴戜滑浠g爜鐨勭被鍨嬨€備粠'vue'瀵煎叆绫诲瀷{App锛孌irectiveBinding}锛涗粠鈥滀换鎰忚Е鎽糕€濆鍏ョ被鍨媨Options,SupportElement}锛汚pp浠h〃vue瀹炰緥绫诲瀷銆侱irectiveBinding琛ㄧず鎸囦护鐨勫弬鏁扮被鍨嬨€傚鏋滀綘闇€瑕佺害鏉熸寚浠ょ殑鍊硷紝渚嬪瑕侀檺鍒秜-touch=鐨勫€煎彧鑳芥槸鏁板瓧绫诲瀷锛岄渶瑕佸啓鎴怐irectiveBinding銆侽ptions鏄痑ny-touch鐨勫弬鏁扮被鍨嬨€係upportElement鏄痑ny-touch鏀寔鐨勫厓绱犵被鍨嬶紝鍏跺疄灏辨槸HTMLElement|SvgElement銆傝鎸囦护鐨勪环鍊兼槸浠€涔堬紵鑾峰彇濡備笅浠g爜锛屼负v-touch鍛戒护娣诲姞涓€涓弬鏁板€硷紝閫氳繃鍛戒护鐨勫€煎皢鍙傛暟浼犻€掔粰any-touch銆傛垜浠€氳繃鎸傝浇閽╁瓙鍑芥暟鐨勭浜屼釜鍙傛暟鑾峰彇鍊笺€傚弬鏁版槸涓€涓璞★紝瀹冪殑鈥滃€尖€濆瓧娈靛氨鏄痸-touch=涔嬪悗鐨勫€笺€傜敱浜巃ny-touch鐨勫弬鏁版槸鎸囦护鐨勫€硷紝閭d箞鎴戜滑灏嗙浜屼釜鍙傛暟鐨勭被鍨嬫爣璁颁负锛欴irectiveBindingmounted(el:SupportElement,binding:DirectiveBinding){}鍦ㄥ畬鏁翠唬鐮佷笅闈紝鎴戜滑鏍囪绫诲瀷銆備粠'vue'瀵煎叆{App锛孌irectiveBinding}锛涗粠鈥滀换鎰忚Е鎽糕€濆鍏ョ被鍨媨Options,SupportElement}锛涗粠鈥滀换鎰忚Е鎽糕€濆鍏Touch锛沜onstelAndAtMap=newWeakMap();exportdefault{install:(app:App)=>{app.directive('touch',{mounted(el:SupportElement,{value}:DirectiveBinding){elAndAtMap.set(el,newATouch(el,value));},unmounted(el:SupportElement){elAndAtMap.get(el).destroy();},});},};婧愮爜鍦板潃宸茬粡瀹炵幇鍒拌繖閲屼簡锛屾湁鍏磋叮鐨勫彲浠s鐭ラ亾涓嶆噦鐨勫彲浠ョ湅鐪嬫垜鐨則s鍩虹璇俱€倀ypescript鍏ラ棬鍩虹绗竴璇撅紝typescript缁忛獙绗簩璇撅紝鍩虹绫诲瀷鍜屽叆闂ㄩ珮绾х被鍨嬬涓夎锛屾硾鍨嬬被鍨嬬鍥涜锛岄珮绾х被鍨嬭В璇荤浜旇锛屽懡鍚嶄粈涔堟槸鐗规畩绌洪棿锛堝懡鍚嶇┖闂达級锛屽涔爒ue3涓殑typescript馃敟婧愮爜馃-銆婃槸銆嬬6璇撅紝浠€涔堟槸澹版槑鏂囦欢锛坉eclare锛夛紵馃-GlobalDeclaration绗?璇撅紝閫氳繃vue3瀹炰緥璁茶declaremodule璇硶濡備綍浣跨敤馃ModuleDeclaration馃崟瀛︿範浜掑姩鎰熻阿闃呰锛屾湁闂鍙互鍔犳垜寰俊锛屾垜鎷変綘鍏ュ井淇$兢锛堝洜涓鸿吘璁寰俊缇ゆ湁100浜虹殑闄愬埗锛岃秴杩?00浜哄悗蹇呴』鐢辩兢鎴愬憳鎷夎繘鏉ワ級