راکت
grandfather
grandfather
توسط grandfather مطرح شد
حل
14 پاسخ

نمایش گزینه های انتخاب شده چک باکس با استفاده از vue در لاراول

سلام
دوستان من یک فیلتر جستجو دارم که کاربر با استفاده از vue میتونه تعدادی چک باکس رو انتخاب و عملیات فیلتر رو انجام بده.
گزینه های انتخابی توسط کاربر رو با استفاده از مدل مربوطه که (mallcatone) هست با v--text="mallcatone" میتونم به صورت زیر نمایش بدم که اصلا جالب نمیشه !!!
[ "Apple", "Orange", "Cherry", "Mengo" ]
چجوری میتونم این داده هارو به صورت جدا نمایش بدم وبرای هر کدوم استایل دهی کنم؟

کدها ی مربوط تو فایل app.js:
'
filtermallcatone:function(data){
if (this.mallcatone.length == 0) return true ;
console.log(data.district);
return this.mallcatone.includes(data.district);
},
'


ثبت پرسش جدید
میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad5 سال پیشمطرح شد
2

داده هارو با v-for نمایش بدین.


grandfather
grandfather
تخصص :پدربزرگ ...
@hossein00655 سال پیشمطرح شد
0

میلاد جان ممنون ... مختصر و مفید ...
یه سوال :
وقتی از لیست موارد فیلتر تیک چک باکس رو بر میداریم موارد انتخاب شده برای فیلتر از بین میره که بایدم اینجوری باشه و مشکلی نیست ...
حالا چجوری میتونیم موارد انتخاب شده برای فیلتر کردن رو از قسمتی که برای نمایش داده ها که با استفاده از حلقه v-for نمایش دادیم حذف کنیمو از لیستمون تیکشون رو برداریم ؟
@milad


میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad5 سال پیشمطرح شد
0

خواهش میکنم، زنده باشید.
به کمک یک آرایه و v-model میتونی ورودی های از نوع checkbox رو، تیک هاشون رو نمایش بدی یا برداری.
این مثال رو نگاه کنید: https://vuejs.org/v2/guide/forms.html#Checkbox


grandfather
grandfather
تخصص :پدربزرگ ...
@hossein00655 سال پیشمطرح شد
0

سوالمو بد مطرح کردم
منظورم اینه که :
فرض کنید ما دوتا باکس داریم
باکس اول ( A )
داخلش لیستی از مواردی هست که میتونیم برای فیلتر کردن ازشون استفاده کنیم که با کد زیر نمایش داده میشه :
<input type="checkbox" v-model="mallcatone" :value="citymenus.name">
با انتخاب هر کدوم تیکش خورده میشه(همزمان تیک نمایش داده میشه ) و عملیات فیلتر هم انجام میشه و وقتی تیک رو برمیداریم به خوبی کار میکنه.(مشکلی در این بخش و باکس اول ( A )نیست )

باکس دوم ( B )
مواردی داخلش نمایش داده میشه که ما از طریقباکس اول ( A ) به عنوان گزینه های فیلتر انتخاب کردیم که با روشی که شما فرمودید میتونیم گزینه هاشو نمایش بدیم.
این گزینه هارو اگر از باکس اول ( A ) تیکشون رو برداریم دیگه داخل باکس دوم ( B ) نمایش داده نمیشه که درست هم هست ...

حالا سوال من اینه که
چجوری میتونیم از همین باکس دوم ( B ) گزینه فیلتر شده رو حذف کنیم و همزمان تیکش هم از باکس اول ( A ) برداشته بشه؟
ممنون میشم راهنمایی کنید...
@milad


میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad5 سال پیشمطرح شد
0

ابتدا یک نکته: لطفا وقتی میخواید داخل انجمن کدهارو قرار بدین، از دکمه مربوطه در ویرایشگر استفاده کنید که از حالت راستچین دربیاد و خوانا بشه.


میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad5 سال پیشمطرح شد
0

پاسخ به سوالتون:
کافیه هنگامی که دارید این بخش دوم رو از طریق v-for ایجاد می کنید، برای هر کدوم از موارد یک رویداد @click قرار بدین و تابع مرتبطی که براش تعریف می کنید، مقدار ورودی رو ازش بگیره و بره توی بخش داده ای تون پیداش کنه و از اونجا حذفش کنه.
اگر توضیحم گویاس که هیچ، اگر گویا نیست، شما کدهای مرتبط به این بخش رو قرار بدین تا روی کدها بهتر بشه توضیح داد.


grandfather
grandfather
تخصص :پدربزرگ ...
@hossein00655 سال پیشمطرح شد
1

مرسی بابت نکته خوبتون در رابطه با قراردادن کدها داخل انجمن...
کدهای داخل فایل app.js و فایل blade به صورت زیر هستش..لطفا ببینید...

کد خود را اینجا وارد کنید

<!---------------------------box A-همه گزینه ها-----------------------> 
 SendMall:function(id){
            axios.post('/citymenu', {
                id: id
            }).then(response => {
              this.citymenu=response.data;
          }, response => {
             this.error = 1;
             console.log('error');
         });
        },  
<!---------------------box B-گزینه های انتخاب شده---------------------> 

            filtermallcatone:function(data){
                if (this.mallcatone.length == 0) return true ;
                console.log(data.district);
                return this.mallcatone.includes(data.district);
        },
<!------------------------------html--------------------------------->  
<div class="col-lg-12">
  <div class="col-lg-12 py-2">
    <h6>box B-گزینه های انتخاب شده</h6>
    <span v-for="mallcatones in mallcatone">
      <i @click="" class="fa fa-remove"></i>
      <a v-text="mallcatones"></a>
    </span> 
  </div>    
   <div class="col-lg-12">
      <h6>box A-همه گزینه ها</h6>
            <div class="dropdown-content">
              <ul class="col-lg-12">                  
                  <li v-for="citymenus in citymenu">
                       <input class="name" type="checkbox" v-model="mallcatone" :value="citymenus.name">
                     @{{ citymenus.name }}
                  </li>
               </ul>
             </div>  
     </div>     
</div>

@milad


میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad5 سال پیشمطرح شد
0

راستش درست متوجه نمیشم کدوم متغیر مربوط به داده ها میشه،
نمونه vue رو نمی دونم چرا قرار ندادین، اون بود بهتر بود.


grandfather
grandfather
تخصص :پدربزرگ ...
@hossein00655 سال پیشمطرح شد
1

یخورده حجم کدها زیاد بود فراموش کردم ...
لطفا این کدهارو بررسی کنید

const app = new Vue({
    el: '#app',
data:{
   //متغیر مربوط به داده های انتخاب شده برای فیلتر
     mallcatone:[],

//متغیر مربوط به همه گزینه ها برای فیلتر
    citymenu:[],
{
 methods:{
 SendMall:function(id){
            axios.post('/citymenu', {
                id: id
            }).then(response => {
              this.citymenu=response.data;
          }, response => {
             this.error = 1;
             console.log('error');
         });
        },  

filtermallcatone:function(data){
         if (this.mallcatone.length == 0) return true ;
         console.log(data.district);
          return this.mallcatone.includes(data.district);
        },

@milad


میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad5 سال پیشمطرح شد
1

این مثال رو من مبتنی بر کد شما نوشتم و به سادگی چیزی که مورد نظرتون هستش رو برآورده می کنه:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue.js</title>
    <script src="https://unpkg.com/vue@next"></script>
    <!-- <script src="./vue.global.js"></script> -->

    <style>
        .wrapper {
            display: flex;
            justify-content: center;
            max-width: 1000px;
            margin: 120px auto 0;
        }
        #box-1, #box-2 {
            padding: 15px;
        }
        #box-1 {
            border-right: 2px solid silver;
        }
        .item {
            display: flex;
            align-items: center;
        }
        .close {
            width: 12px;
            height: 12px;
            padding: 4px;
            margin: 4px;
            color: red;
            font-size: 10px;
            text-align: center;
            border-radius: 50%;
            border: 2px solid red;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="app">

        <div class="wrapper">
            <div id="box-1">
                <h3>box-1</h3>
                <div v-for="el in citymenu">
                    <input type="checkbox" :id="el.name" :value="el.name" v-model="mallcatone" />
                    <label :for="el.name">{{el.name}}</label>
                </div>
            </div>
            <div id="box-2">
                <h3>box-2</h3>
                <div v-for="el in mallcatone" class="item">
                    <span @click="removeSelected(el)" class="close">X</span>
                    <a v-text="el"></a>
                </div>            
            </div>
        </div>
        <div class="wrapper">mallcatone names: {{ mallcatone }}</div>   

    </div>

    <!-- <script src="./main.js"></script> -->

    <script>
    const app = Vue.createApp({
        data() {
            return {
                citymenu: [],
                mallcatone: [],
            }
        },
        methods: {
            removeSelected(el) {
                this.mallcatone.splice(this.mallcatone.indexOf(el), 1);            
            },
        },
        created () {
            this.citymenu = [
                {name: 'Tehran', other: '100'},
                {name: 'Esfahan', other: '120'}, 
                {name: 'Shiraz', other: '110'}, 
                {name: 'Tabriz', other: '150'}, 
                {name: 'Mashhad', other: '130'}, 
                {name: 'Khozestan', other: '190'},
                {name: 'Yazd', other: '200'},
                {name: 'Zahedan', other: '130'},
                {name: 'Gilan', other: '170'},
                {name: 'Zanjan', other: '110'},
                {name: 'Kerman', other: '150'}
            ]
        }

    }).mount('#app');
    </script>
</body>
</html>

میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad5 سال پیشمطرح شد
1

این مثال رو کپی کنید و کدهارو بررسی کنید.
به نظرم نیاز هستش که شما روی مبانی یادگیری vuejs کار کنید، چون سوال تون با همون مبانی اولیه پاسخگویی میشه و به نظر میرسه مبانی براتون جا نیفتاده.


grandfather
grandfather
تخصص :پدربزرگ ...
@hossein00655 سال پیشمطرح شد
1

دقیقا ... متاسفانه با اموزشهایی رفتم جلو که اصلا کامل نبودند...ممنون از راهنماییتون
@milad


grandfather
grandfather
تخصص :پدربزرگ ...
@hossein00655 سال پیشمطرح شد
1

میلاد جان سپاس فراوان ...
ممنون از وقتی که گذاشتی ...
@milad


میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad5 سال پیشمطرح شد
1

خواهش می کنم،
وقت گذاشتم تا حلش کنم، واسه خودمم سودمند بودش : )
به تازگی vue 3 منتشر شده، زمان مناسبی هستش که مُرور کنید مطالب رو و گیرهایی که حین کار براتون پیش میاد رو برطرف کنید.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام