VueJs + VueRouter + مشروط. دراجة اخرى

مساء الخير في هذه المقالة ، سأقوم بتحليل طريقة تسمح لك بإظهار نافذة مشروطة لاحتياجاتنا عند تغيير العنوان. أعلم أن هناك حلاً خاصًا بمكون الوسائط على الموقع الرسمي . بالإضافة إلى ذلك ، هناك العديد من المقالات الأخرى حول Habré المكرسة لموضوع windows مشروط في VueJs (على سبيل المثال ، هذا واحد ).

ومع ذلك ، في رأيي ، كل منهم له عيوبه ، على سبيل المثال:

  • في حالة المكونات الموضحة في الموقع خارج ، تحتاج إلى إنشاء متغير منفصل والربط به ؛
  • يناقش المقال الثاني حلول الجهة الخارجية. في هذه الحالة ، تحتاج إلى قضاء بعض الوقت ومعرفة كيفية استخدام هذه المكونات + ، في رأيي ، التبعيات في المشروع. وأنا أتولى هذا المنصب: كلما كان ذلك أبسط كان ذلك أفضل.

مرة أخرى ، لا أستطيع أن أعرف كل شيء ، وبالتالي ، إذا كان لديك ما تقوله أو تدوينه ، فأنا منفتح على النقد البناء. علاوة على ذلك ، سوف نستخدم وظائف قياسية حصرية للأدوات التي نستخدمها (Vue ، VueRouter ، Bootstrap Modal). لذلك ، أقرب إلى النقطة ...

سيكون هناك أشخاص يقولون: "من الأفضل توصيل تبعيات npm لـ modal بدلاً من سحب bootstrap + jquery بالكامل." أيها الرفاق ، لا أحد يزعجك من تكييف هذا الشيء كله مع احتياجاتك وأدواتك. الأدوات المذكورة أعلاه هي مجرد مثال للتنفيذ.

خيار العمل على الفور .

HTML
<div id="app"> <nav> <router-link :to="{ name: 'modal' }" exact>Open Modal</router-link> </nav> <router-view></router-view> </div> 


جافا سكريبت
 Vue.use(VueRouter) const Modal = { template: `<div class="modal fade" tabindex="-1" role="dialog" ref="modal"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Modal title</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <p>Modal body text goes here.</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> </div> </div> </div> </div> mounted: function(){ console.log('mounted') var context = this; $(this.$refs.modal).modal('show') $(this.$refs.modal).on('hidden.bs.modal', function(){ context.$router.go(-1); }) } } const routes = [ { path: '/modal', name: 'modal', component: Modal }, ] const router = new VueRouter({ routes, }) // New VueJS instance var app = new Vue({ // CSS selector of the root DOM element el: '#app', // Inject the router into the app router, }) 


في الواقع ، لا يوجد شيء معقد.

  1. عند النقر على الرابط الخاص بنا ، يتم تثبيت مكون Modal الخاص بنا.
  2. عند تثبيته ، نفتح نافذة الوسائط الخاصة بنا ومن خلال ذلك. $ Refs نتتبع إغلاقها.
  3. عندما يتم إغلاقه ، نرجع الشخص برمجياً خطوة إلى الوراء بحيث لا يتم تثبيت المكون الخاص بنا.

وبالتالي ، يعد هذا الأسلوب وهذه البنية حلاً جيدًا إذا كنت تخطط للحصول على العديد من الإطارات مشروطة مع منطق منفصل:

  • التخصيص السهل.
  • لا حاجة لتحميل تبعيات الطرف الثالث. بالنسبة لي شخصيا ، كلما كان ذلك أفضل ؛

Source: https://habr.com/ru/post/ar462429/


All Articles