Web Development Framework7 এবং Vue.js Integration গাইড ও নোট

214

Framework7 এবং Vue.js এর সমন্বয়ে আপনি শক্তিশালী, ইন্টারঅ্যাকটিভ এবং রেসপন্সিভ মোবাইল এবং ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন। Vue.js একটি প্রগ্রেসিভ জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক যা ইউজার ইন্টারফেস তৈরি করতে ব্যবহৃত হয়, এবং Framework7 মোবাইল-ফোকাসড UI কম্পোনেন্ট সরবরাহ করে। এই দুটি ফ্রেমওয়ার্কের সমন্বয়ে ডেভেলপাররা দ্রুত এবং কার্যকর অ্যাপ্লিকেশন ডেভেলপ করতে পারে।


১. Framework7 এবং Vue.js Integration এর সুবিধাসমূহ

  • কম্পোনেন্ট-ভিত্তিক আর্কিটেকচার: Vue.js এর কম্পোনেন্ট-ভিত্তিক পদ্ধতির সাথে Framework7 এর রেডি-মেড UI কম্পোনেন্টগুলোর সমন্বয়।
  • রাউটিং সহজ করা: Vue Router এর মাধ্যমে সহজ রাউটিং কনফিগারেশন।
  • স্টেট ম্যানেজমেন্ট: Vuex এর সাথে সহজ স্টেট ম্যানেজমেন্ট।
  • রিএক্টিভ ডেটা বাইন্ডিং: Vue.js এর রিএক্টিভ সিস্টেমের সাথে UI আপডেট সহজ।
  • উন্নত ডেভেলপমেন্ট এক্সপেরিয়েন্স: ডেভেলপার টুলস, হট রিলোডিং, এবং অন্যান্য উন্নত ফিচারগুলি।

২. প্রয়োজনীয়তা (Prerequisites)

Framework7 এবং Vue.js এর সাথে কাজ শুরু করার আগে নিম্নলিখিত টুলস ইনস্টল করা প্রয়োজন:

  • Node.js এবং NPM: Framework7 CLI এবং Vue.js ব্যবহার করতে।
  • Code Editor: Visual Studio Code বা অন্য যেকোনো প্রিয় কোড এডিটর।
  • Basic Knowledge: HTML, CSS, JavaScript এবং Vue.js এর মৌলিক ধারণা।

৩. ধাপসমূহ: Framework7 এবং Vue.js Integration

৩.১. পরিবেশ প্রস্তুত করা

প্রথমে নিশ্চিত করুন যে আপনার সিস্টেমে Node.js এবং NPM ইনস্টল আছে।

Node.js এবং NPM ইনস্টল করা:

  • Node.js অফিসিয়াল ওয়েবসাইট থেকে উপযুক্ত ভার্সন ডাউনলোড করুন এবং ইনস্টল করুন।
  • ইনস্টলেশনের পর, টার্মিনালে নিচের কমান্ডগুলো চালিয়ে ইনস্টল ভার্সন পরীক্ষা করুন:

    node -v
    npm -v
    

৩.২. Framework7 CLI ইনস্টল করা

Framework7 CLI (Command Line Interface) ব্যবহার করে দ্রুত নতুন প্রজেক্ট তৈরি করা যায়।

CLI ইনস্টল করার কমান্ড:

npm install framework7-cli -g

৩.৩. নতুন Framework7-Vue প্রজেক্ট তৈরি করা

Framework7 CLI ব্যবহার করে একটি নতুন Vue.js ভিত্তিক প্রজেক্ট তৈরি করুন।

প্রজেক্ট তৈরি করার কমান্ড:

framework7 create

প্রম্পট অনুসরণ করে নিচের অপশনগুলো নির্বাচন করুন:

  1. Project name: আপনার প্রজেক্টের নাম দিন (যেমন: my-framework7-vue-app).
  2. Choose a template: Framework7 + Vue নির্বাচন করুন।
  3. Custom build: No নির্বাচন করুন (বা আপনার প্রয়োজন অনুযায়ী কাস্টমাইজ করুন).
  4. Select target platforms: Web App অথবা PWA নির্বাচন করুন।
  5. Select CSS preprocessor: CSS অথবা আপনার পছন্দের প্রিপ্রসেসর নির্বাচন করুন।
  6. Select Framework: Vue নির্বাচন করুন।
  7. Select build tool: Vite অথবা Webpack নির্বাচন করুন (Vite দ্রুত বিল্ডের জন্য সুপারিশ করা হয়)।
  8. Add Cordova integration?: আপনার প্রয়োজন অনুযায়ী নির্বাচন করুন।

উদাহরণ:

? Framework7 Project Name: my-framework7-vue-app
? Select a template: Framework7 + Vue
? Do you want a custom build with additional features? No
? Select target platforms: Web App
? Select CSS preprocessor: CSS
? Select Framework: Vue
? Select build tool: Vite
? Add Cordova integration? No

৩.৪. প্রজেক্ট ডিরেক্টরিতে প্রবেশ করা এবং ডিপেনডেন্সি ইনস্টল করা

প্রজেক্ট তৈরি হওয়ার পর, প্রজেক্ট ডিরেক্টরিতে যান এবং প্যাকেজ ইনস্টল করুন।

cd my-framework7-vue-app
npm install

৩.৫. ডেভেলপমেন্ট সার্ভার চালানো

ডেভেলপমেন্ট সার্ভার চালাতে নিম্নলিখিত কমান্ড ব্যবহার করুন:

npm run dev

এটি আপনার প্রজেক্টকে লোকালহোস্টে চালু করবে, সাধারণত http://localhost:3000 এ। ব্রাউজারে আপনার অ্যাপটি দেখতে পাবেন।

৩.৬. প্রজেক্ট স্ট্রাকচার বুঝে নেওয়া

নতুন প্রজেক্টের ফোল্ডার স্ট্রাকচার সাধারণত নিচের মতো হবে:

my-framework7-vue-app/
├── node_modules/
├── public/
│   └── index.html
├── src/
│   ├── assets/
│   ├── components/
│   ├── pages/
│   ├── router/
│   │   └── index.js
│   ├── App.vue
│   └── main.js
├── package.json
├── vite.config.js
└── README.md

মূল ফাইল ও ফোল্ডার:

  • src/main.js: অ্যাপ ইনিশিয়ালাইজ করার প্রধান জাভাস্ক্রিপ্ট ফাইল।
  • src/App.vue: মূল Vue কম্পোনেন্ট।
  • src/router/index.js: রাউটিং কনফিগারেশন ফাইল।
  • src/pages/: বিভিন্ন পেজ কম্পোনেন্ট ধারণ করে।

৪. Framework7 এবং Vue.js এর সাথে কাজ করা

৪.১. মূল ফাইলসমূহ কনফিগার করা

src/main.js ফাইলে Framework7 এবং Vue.js ইনিশিয়ালাইজ করুন:

import { createApp } from 'vue';
import Framework7 from 'framework7/lite-bundle';
import Framework7Vue from 'framework7-vue/lite-bundle';
import App from './App.vue';
import routes from './router/routes.js';

// Import Framework7 styles
import 'framework7/framework7-bundle.css';

// Create Vue app
const app = createApp(App);

// Use Framework7 and Framework7Vue
app.use(Framework7Vue, Framework7);

// Mount Vue app
app.mount('#app');

src/App.vue ফাইলে মূল লেআউট নির্ধারণ করুন:

<template>
  <f7-app>
    <!-- Main View -->
    <f7-view main>
      <router-view></router-view>
    </f7-view>
  </f7-app>
</template>

<script>
export default {
  name: 'App',
};
</script>

<style>
/* Custom styles can be added here */
</style>

৪.২. রাউটিং কনফিগারেশন

src/router/routes.js ফাইলে রাউট সংজ্ঞায়িত করুন:

import HomePage from '../pages/HomePage.vue';
import AboutPage from '../pages/AboutPage.vue';

export default [
  {
    path: '/',
    component: HomePage,
  },
  {
    path: '/about/',
    component: AboutPage,
  },
];

৪.৩. পেজ কম্পোনেন্ট তৈরি করা

src/pages/HomePage.vue:

<template>
  <f7-page>
    <f7-navbar title="Home"></f7-navbar>
    <f7-block>
      <p>Welcome to the Home Page!</p>
      <f7-button href="/about/">Go to About Page</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'HomePage',
};
</script>

<style scoped>
/* HomePage styles */
</style>

src/pages/AboutPage.vue:

<template>
  <f7-page>
    <f7-navbar title="About"></f7-navbar>
    <f7-block>
      <p>This is the About Page.</p>
      <f7-button href="/">Go Back Home</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'AboutPage',
};
</script>

<style scoped>
/* AboutPage styles */
</style>

৪.৪. UI কম্পোনেন্ট ব্যবহার করা

Framework7 এর বিভিন্ন UI কম্পোনেন্ট যেমন Button, Navbar, List, Block, ইত্যাদি Vue কম্পোনেন্ট হিসেবে সহজে ব্যবহার করা যায়।

উদাহরণ: একটি কার্ড কম্পোনেন্ট তৈরি করা

src/components/MyCard.vue:

<template>
  <f7-card>
    <f7-card-header>
      Card Header
    </f7-card-header>
    <f7-card-content>
      <p>This is the content of the card.</p>
      <f7-button fill>Click Me</f7-button>
    </f7-card-content>
  </f7-card>
</template>

<script>
export default {
  name: 'MyCard',
};
</script>

<style scoped>
/* MyCard styles */
</style>

src/pages/HomePage.vue এ কম্পোনেন্ট ব্যবহার করা:

<template>
  <f7-page>
    <f7-navbar title="Home"></f7-navbar>
    <f7-block>
      <p>Welcome to the Home Page!</p>
      <f7-button href="/about/">Go to About Page</f7-button>
      <!-- MyCard কম্পোনেন্ট অন্তর্ভুক্ত করা -->
      <my-card></my-card>
    </f7-block>
  </f7-page>
</template>

<script>
import MyCard from '../components/MyCard.vue';

export default {
  name: 'HomePage',
  components: {
    MyCard,
  },
};
</script>

<style scoped>
/* HomePage styles */
</style>

৪.৫. ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন

Vue.js এবং Framework7 এর মাধ্যমে ফর্ম ডেটা হ্যান্ডল এবং ভ্যালিডেশন সহজে করা যায়।

src/pages/FormPage.vue:

<template>
  <f7-page>
    <f7-navbar title="Form"></f7-navbar>
    <f7-block>
      <f7-list form>
        <f7-list-item>
          <f7-label>Name</f7-label>
          <f7-input v-model="form.name" type="text" placeholder="Enter your name" required></f7-input>
        </f7-list-item>
        <f7-list-item>
          <f7-label>Email</f7-label>
          <f7-input v-model="form.email" type="email" placeholder="Enter your email" required></f7-input>
        </f7-list-item>
        <f7-list-item>
          <f7-label>Password</f7-label>
          <f7-input v-model="form.password" type="password" placeholder="Enter your password" required></f7-input>
        </f7-list-item>
      </f7-list>
      <f7-block>
        <f7-button @click="submitForm">Submit</f7-button>
      </f7-block>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'FormPage',
  data() {
    return {
      form: {
        name: '',
        email: '',
        password: '',
      },
    };
  },
  methods: {
    submitForm() {
      // ফর্ম ডেটা যাচাই করা
      if (this.form.name.length < 3) {
        this.$f7.dialog.alert('Name must be at least 3 characters long.');
        return;
      }
      if (!this.form.email.includes('@')) {
        this.$f7.dialog.alert('Please enter a valid email address.');
        return;
      }
      if (this.form.password.length < 6) {
        this.$f7.dialog.alert('Password must be at least 6 characters long.');
        return;
      }

      // সফল সাবমিট হলে
      this.$f7.dialog.alert('Form submitted successfully!');
      console.log(this.form);
    },
  },
};
</script>

<style scoped>
/* FormPage styles */
</style>

৪.৬. ইভেন্ট হ্যান্ডলিং

Vue.js এর মেথডস এবং Framework7 এর ডায়ালগ, পপআপ ইত্যাদি কম্পোনেন্টের ইভেন্ট ব্যবহার করে ইন্টারঅ্যাকটিভ ফিচার তৈরি করা যায়।

উদাহরণ: একটি পপআপ ব্যবহার করা

src/components/MyPopup.vue:

<template>
  <f7-popup id="my-popup">
    <f7-view>
      <f7-page>
        <f7-navbar title="Popup"></f7-navbar>
        <f7-block>
          <p>This is a popup!</p>
          <f7-button @click="closePopup">Close</f7-button>
        </f7-block>
      </f7-page>
    </f7-view>
  </f7-popup>
</template>

<script>
export default {
  name: 'MyPopup',
  methods: {
    closePopup() {
      this.$f7.popup.close('#my-popup');
    },
  },
};
</script>

<style scoped>
/* MyPopup styles */
</style>

src/pages/HomePage.vue এ পপআপ কম্পোনেন্ট ব্যবহার করা:

<template>
  <f7-page>
    <f7-navbar title="Home"></f7-navbar>
    <f7-block>
      <f7-button @click="openPopup">Open Popup</f7-button>
      <my-popup></my-popup>
    </f7-block>
  </f7-page>
</template>

<script>
import MyPopup from '../components/MyPopup.vue';

export default {
  name: 'HomePage',
  components: {
    MyPopup,
  },
  methods: {
    openPopup() {
      this.$f7.popup.open('#my-popup');
    },
  },
};
</script>

<style scoped>
/* HomePage styles */
</style>

৫. উন্নত টপিকসমূহ

৫.১. স্টেট ম্যানেজমেন্ট (Vuex)

Vuex ব্যবহার করে অ্যাপের স্টেট ম্যানেজমেন্ট সহজ করা যায়, বিশেষ করে বড় অ্যাপ্লিকেশনে।

Vuex ইনস্টল করা:

npm install vuex@next

src/store/index.js:

import { createStore } from 'vuex';

const store = createStore({
  state() {
    return {
      user: null,
    };
  },
  mutations: {
    setUser(state, user) {
      state.user = user;
    },
  },
  actions: {
    login({ commit }, user) {
      // লগইন লজিক
      commit('setUser', user);
    },
    logout({ commit }) {
      // লগআউট লজিক
      commit('setUser', null);
    },
  },
});

export default store;

src/main.js এ স্টোর যুক্ত করা:

import { createApp } from 'vue';
import Framework7 from 'framework7/lite-bundle';
import Framework7Vue from 'framework7-vue/lite-bundle';
import App from './App.vue';
import routes from './router/routes.js';
import store from './store';

// Import Framework7 styles
import 'framework7/framework7-bundle.css';

// Create Vue app
const app = createApp(App);

// Use Framework7, Framework7Vue, এবং Vuex স্টোর
app.use(Framework7Vue, Framework7);
app.use(store);

// Mount Vue app
app.mount('#app');

৫.২. কাস্টম কম্পোনেন্ট তৈরি করা

Vue.js এর মাধ্যমে কাস্টম কম্পোনেন্ট তৈরি করে Framework7 এর UI কম্পোনেন্টগুলোর সাথে ইন্টিগ্রেট করা যায়।

src/components/CustomButton.vue:

<template>
  <f7-button @click="handleClick">Custom Button</f7-button>
</template>

<script>
export default {
  name: 'CustomButton',
  methods: {
    handleClick() {
      this.$f7.dialog.alert('Custom Button Clicked!');
    },
  },
};
</script>

<style scoped>
/* CustomButton styles */
</style>

src/pages/HomePage.vue এ কাস্টম কম্পোনেন্ট ব্যবহার:

<template>
  <f7-page>
    <f7-navbar title="Home"></f7-navbar>
    <f7-block>
      <custom-button></custom-button>
    </f7-block>
  </f7-page>
</template>

<script>
import CustomButton from '../components/CustomButton.vue';

export default {
  name: 'HomePage',
  components: {
    CustomButton,
  },
};
</script>

<style scoped>
/* HomePage styles */
</style>

৫.৩. থিমিং এবং স্টাইলিং

Framework7 এর থিমিং সাপোর্ট ব্যবহার করে অ্যাপের লুক এবং ফিল কাস্টমাইজ করা যায়।

ডিফল্ট থিম ব্যবহার:

Framework7 ডিফল্টভাবে iOS এবং Material Design থিম সাপোর্ট করে। থিম নির্বাচন করতে Framework7 ইনিশিয়ালাইজেশন ফাইলে থিম নির্ধারণ করতে পারেন।

src/main.js:

import { createApp } from 'vue';
import Framework7 from 'framework7/lite-bundle';
import Framework7Vue from 'framework7-vue/lite-bundle';
import App from './App.vue';
import routes from './router/routes.js';
import store from './store';

// Import Framework7 styles
import 'framework7/framework7-bundle.css';

// Create Vue app
const app = createApp(App);

// Use Framework7, Framework7Vue, এবং Vuex স্টোর
app.use(Framework7Vue, Framework7);

// ইনিশিয়ালাইজ Framework7 অ্যাপ
app.use(Framework7, {
  name: 'MyApp', // অ্যাপের নাম
  theme: 'auto', // থিম অটো-সিলেক্ট
  routes,
});

// Mount Vue app
app.mount('#app');

কাস্টম থিম যোগ করা:

আপনি নিজস্ব CSS ব্যবহার করে থিম কাস্টমাইজ করতে পারেন।

src/assets/styles/custom.css:

/* কাস্টম থিম স্টাইল */
.f7-navbar {
  background-color: #4CAF50;
  color: white;
}

.f7-button {
  background-color: #2196F3;
  color: white;
}

src/main.js এ কাস্টম স্টাইল যুক্ত করা:

import './assets/styles/custom.css';

৬. উদাহরণ প্রজেক্ট

নিচে একটি সম্পূর্ণ উদাহরণ দেওয়া হলো যা Framework7 এবং Vue.js এর সমন্বয়ে তৈরি একটি সিম্পল অ্যাপ্লিকেশন দেখায়।

প্রজেক্ট স্ট্রাকচার:

my-framework7-vue-app/
├── node_modules/
├── public/
│   └── index.html
├── src/
│   ├── assets/
│   │   └── styles/
│   │       └── custom.css
│   ├── components/
│   │   └── MyCard.vue
│   ├── pages/
│   │   ├── HomePage.vue
│   │   └── AboutPage.vue
│   ├── router/
│   │   └── routes.js
│   ├── store/
│   │   └── index.js
│   ├── App.vue
│   └── main.js
├── package.json
├── vite.config.js
└── README.md

src/main.js:

import { createApp } from 'vue';
import Framework7 from 'framework7/lite-bundle';
import Framework7Vue from 'framework7-vue/lite-bundle';
import App from './App.vue';
import routes from './router/routes.js';
import store from './store';

// Import Framework7 styles
import 'framework7/framework7-bundle.css';
// Import custom styles
import './assets/styles/custom.css';

// Create Vue app
const app = createApp(App);

// Use Framework7Vue এবং Vuex স্টোর
app.use(Framework7Vue, Framework7);
app.use(store);

// ইনিশিয়ালাইজ Framework7 অ্যাপ
app.use(Framework7, {
  name: 'MyApp',
  theme: 'auto',
  routes,
});

// Mount Vue app
app.mount('#app');

src/App.vue:

<template>
  <f7-app>
    <!-- Main View -->
    <f7-view main>
      <router-view></router-view>
    </f7-view>
  </f7-app>
</template>

<script>
export default {
  name: 'App',
};
</script>

<style>
/* Global styles */
</style>

src/router/routes.js:

import HomePage from '../pages/HomePage.vue';
import AboutPage from '../pages/AboutPage.vue';

export default [
  {
    path: '/',
    component: HomePage,
  },
  {
    path: '/about/',
    component: AboutPage,
  },
];

src/store/index.js:

import { createStore } from 'vuex';

const store = createStore({
  state() {
    return {
      user: null,
    };
  },
  mutations: {
    setUser(state, user) {
      state.user = user;
    },
  },
  actions: {
    login({ commit }, user) {
      commit('setUser', user);
    },
    logout({ commit }) {
      commit('setUser', null);
    },
  },
});

export default store;

src/pages/HomePage.vue:

<template>
  <f7-page>
    <f7-navbar title="Home"></f7-navbar>
    <f7-block>
      <p>Welcome to the Home Page!</p>
      <f7-button href="/about/">Go to About Page</f7-button>
      <my-card></my-card>
    </f7-block>
  </f7-page>
</template>

<script>
import MyCard from '../components/MyCard.vue';

export default {
  name: 'HomePage',
  components: {
    MyCard,
  },
};
</script>

<style scoped>
/* HomePage styles */
</style>

src/pages/AboutPage.vue:

<template>
  <f7-page>
    <f7-navbar title="About"></f7-navbar>
    <f7-block>
      <p>This is the About Page.</p>
      <f7-button href="/">Go Back Home</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'AboutPage',
};
</script>

<style scoped>
/* AboutPage styles */
</style>

src/components/MyCard.vue:

<template>
  <f7-card>
    <f7-card-header>
      Card Header
    </f7-card-header>
    <f7-card-content>
      <p>This is the content of the card.</p>
      <f7-button fill>Click Me</f7-button>
    </f7-card-content>
  </f7-card>
</template>

<script>
export default {
  name: 'MyCard',
};
</script>

<style scoped>
/* MyCard styles */
</style>

src/assets/styles/custom.css:

/* কাস্টম থিম স্টাইল */
.f7-navbar {
  background-color: #4CAF50;
  color: white;
}

.f7-button {
  background-color: #2196F3;
  color: white;
}

.my-card {
  margin-top: 20px;
}

৭. সম্পূর্ণ উদাহরণ কোড

public/index.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Framework7 Vue App</title>
</head>
<body>
  <div id="app"></div>
  <!-- Vite will inject scripts here -->
</body>
</html>

src/pages/HomePage.vue সম্পূর্ণ উদাহরণ:

<template>
  <f7-page>
    <f7-navbar title="Home"></f7-navbar>
    <f7-block>
      <p>Welcome to the Home Page!</p>
      <f7-button href="/about/">Go to About Page</f7-button>
      <my-card></my-card>
      <f7-button @click="openPopup">Open Popup</f7-button>
      <my-popup></my-popup>
    </f7-block>
  </f7-page>
</template>

<script>
import MyCard from '../components/MyCard.vue';
import MyPopup from '../components/MyPopup.vue';

export default {
  name: 'HomePage',
  components: {
    MyCard,
    MyPopup,
  },
  methods: {
    openPopup() {
      this.$f7.popup.open('#my-popup');
    },
  },
};
</script>

<style scoped>
/* HomePage styles */
</style>

src/components/MyPopup.vue:

<template>
  <f7-popup id="my-popup">
    <f7-view>
      <f7-page>
        <f7-navbar title="Popup"></f7-navbar>
        <f7-block>
          <p>This is a popup!</p>
          <f7-button @click="closePopup">Close</f7-button>
        </f7-block>
      </f7-page>
    </f7-view>
  </f7-popup>
</template>

<script>
export default {
  name: 'MyPopup',
  methods: {
    closePopup() {
      this.$f7.popup.close('#my-popup');
    },
  },
};
</script>

<style scoped>
/* MyPopup styles */
</style>

৮. সম্পূর্ণ ফ্লো

  1. প্রজেক্ট তৈরি: Framework7 CLI ব্যবহার করে একটি Vue.js প্রজেক্ট তৈরি করুন।
  2. কম্পোনেন্ট তৈরি: Framework7 এর বিভিন্ন UI কম্পোনেন্ট ব্যবহার করে Vue কম্পোনেন্ট তৈরি করুন।
  3. রাউটিং কনফিগারেশন: Vue Router এর মাধ্যমে পেজ রাউটিং কনফিগার করুন।
  4. ডেটা হ্যান্ডলিং: Vuex ব্যবহার করে স্টেট ম্যানেজমেন্ট করুন।
  5. ইভেন্ট হ্যান্ডলিং: Framework7 এর ইভেন্ট API ব্যবহার করে ইন্টারঅ্যাকটিভ ফিচার যোগ করুন।
  6. স্টাইলিং: CSS এবং Framework7 এর থিমিং সাপোর্ট ব্যবহার করে অ্যাপের লুক কাস্টমাইজ করুন।
  7. ডেভেলপমেন্ট এবং বিল্ড: ডেভেলপমেন্ট সার্ভার চালান এবং প্রোডাকশন বিল্ড তৈরি করুন।

৯. রিসোর্স এবং আরও পড়ার জন্য

Content added By

Vue.js এর সাথে Framework7 ব্যবহার

318

Framework7 এবং Vue.js এর সংমিশ্রণ একটি শক্তিশালী টুলসেট প্রদান করে, যা আপনাকে আধুনিক, ইন্টারেক্টিভ এবং রেসপন্সিভ মোবাইল ও ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। Vue.js একটি জনপ্রিয় জাভাস্ক্রিপ্ট ফ্রেমওয়ার্ক, যা কম্পোনেন্ট-ভিত্তিক আর্কিটেকচার এবং সহজ স্টেট ম্যানেজমেন্ট প্রদান করে। Framework7 এর নেটিভ-লুক এবং ফিল সহ Vue.js এর সাথে একত্রিত ব্যবহার করলে আপনি দ্রুত এবং কার্যকরী অ্যাপ্লিকেশন ডেভেলপ করতে পারেন।


Framework7 এবং Vue.js এর সংমিশ্রণ কেন?

  • নেটিভ-লুক এবং ফিল: Framework7 এর সাথে Vue.js ব্যবহার করে আপনি নেটিভ মোবাইল অ্যাপের মতো দেখতে ও অনুভব করতে পারেন।
  • কম্পোনেন্ট ভিত্তিক: Vue.js এর কম্পোনেন্ট-ভিত্তিক আর্কিটেকচার Framework7 এর UI উপাদানগুলোর সাথে সুসংহতভাবে কাজ করে।
  • রিপ্রোডাক্টিভ ডেভেলপমেন্ট: দ্রুত প্রোটোটাইপিং এবং পুনরায় ব্যবহারযোগ্য কম্পোনেন্ট তৈরি করা সহজ।
  • রাউটিং এবং স্টেট ম্যানেজমেন্ট: Vue Router এবং Vuex এর সাথে সহজ ইন্টিগ্রেশন।

প্রয়োজনীয়তা

Framework7 এবং Vue.js এর সাথে কাজ শুরু করতে নিম্নলিখিত টুলস ইনস্টল থাকতে হবে:

  • Node.js এবং NPM: Framework7 CLI এবং অন্যান্য প্যাকেজ ব্যবস্থাপনার জন্য প্রয়োজন।
  • Vue CLI: Vue.js প্রজেক্ট তৈরি এবং পরিচালনার জন্য।
  • Code Editor: Visual Studio Code বা অন্য কোনো প্রিয় কোড এডিটর।

ইনস্টলেশন এবং সেটআপ

১. Node.js এবং NPM ইনস্টল করা

প্রথমে নিশ্চিত করুন যে আপনার সিস্টেমে Node.js এবং NPM ইনস্টল করা আছে। Node.js ডাউনলোড করুন এবং ইনস্টল করুন।

২. Vue CLI ইনস্টল করা

Vue CLI ইনস্টল করতে নিচের কমান্ডটি ব্যবহার করুন:

npm install -g @vue/cli

৩. Framework7 CLI ইনস্টল করা

Framework7 CLI ইনস্টল করতে নিম্নলিখিত কমান্ড ব্যবহার করুন:

npm install -g framework7-cli

নতুন Framework7 + Vue.js প্রজেক্ট তৈরি করা

Framework7 CLI ব্যবহার করে একটি নতুন Vue.js প্রজেক্ট তৈরি করা খুবই সহজ। নিচের ধাপগুলো অনুসরণ করুন:

১. নতুন প্রজেক্ট তৈরি করুন

framework7 create

২. প্রম্পট অনুসরণ করে অপশন নির্বাচন করুন

প্রজেক্ট তৈরি করার সময় Framework7 CLI আপনাকে কিছু প্রম্পট দেখাবে। নিচে গুরুত্বপূর্ণ অপশনগুলোর বিবরণ দেওয়া হলো:

  • Framework7 UI Framework: Vue.js
  • Target App Type: Single Page App অথবা আপনার প্রয়োজন অনুযায়ী নির্বাচন করুন।
  • Theme: iOS অথবা Material Design
  • CSS Preprocessor: CSS, LESS, অথবা SASS
  • Build Tool: Webpack অথবা Vite
  • Router: Vue Router
  • State Management: Vuex (যদি প্রয়োজন হয়)
  • Cordova Integration: যদি মোবাইল অ্যাপ ডেভেলপমেন্টের জন্য Cordova ব্যবহার করতে চান, তাহলে Yes নির্বাচন করুন।

৩. প্রজেক্ট ডিরেক্টরিতে যান এবং ডিপেনডেন্সি ইনস্টল করুন

cd <project-name>
npm install

৪. ডেভেলপমেন্ট সার্ভার চালানো

npm run serve

এটি আপনার প্রজেক্টকে লোকালহোস্টে চালু করবে, এবং আপনি এটি http://localhost:8080 এ দেখতে পারবেন।


প্রজেক্ট স্ট্রাকচার

একটি Framework7 + Vue.js প্রজেক্টের সাধারণ ফোল্ডার স্ট্রাকচার নিচের মতো হতে পারে:

/src
  /assets         # ইমেজ, ফন্ট, ও অন্যান্য স্ট্যাটিক ফাইল
  /components     # Vue কম্পোনেন্টস
  /pages          # Framework7 পেজ কম্পোনেন্টস
  /store          # Vuex স্টোর
  App.vue         # মেইন Vue কম্পোনেন্ট
  main.js         # এন্ট্রি পয়েন্ট
/index.html        # মূল HTML ফাইল

Framework7 এর সাথে Vue.js এর কম্পোনেন্ট ব্যবহার

Framework7 এর সাথে Vue.js ব্যবহার করার জন্য, আপনি বিভিন্ন Framework7 Vue কম্পোনেন্ট ব্যবহার করতে পারেন। উদাহরণস্বরূপ, f7-page, f7-navbar, f7-list, ইত্যাদি।

উদাহরণ: একটি সাধারণ পৃষ্ঠা কম্পোনেন্ট

<template>
  <f7-page name="home">
    <f7-navbar title="Framework7 + Vue.js"></f7-navbar>
    <f7-block>
      <p>স্বাগতম Framework7 এবং Vue.js এ!</p>
      <f7-button @click="showAlert">বাটন টিপুন</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'HomePage',
  methods: {
    showAlert() {
      this.$f7.dialog.alert('আপনি বাটন টিপেছেন!');
    }
  }
}
</script>

<style scoped>
/* আপনার কাস্টম স্টাইল এখানে লিখুন */
</style>

রাউটিং সেটআপ

Framework7 CLI দ্বারা তৈরি প্রজেক্টে Vue Router ইনস্টল করা থাকে। রাউটিং কনফিগার করতে src/router/index.js ফাইলে যেতে হবে।

উদাহরণ: রাউট কনফিগারেশন

import Framework7 from 'framework7/lite-bundle';
import Framework7Vue from 'framework7-vue/lite';
import Vue from 'vue';
import App from '../App.vue';
import HomePage from '../pages/HomePage.vue';
import AboutPage from '../pages/AboutPage.vue';

// Framework7Vue ইনস্টল করা
Framework7.use(Framework7Vue);

new Vue({
  el: '#app',
  render: (h) => h(App),
  framework7: {
    root: '#app',
    name: 'My App',
    theme: 'auto',
    routes: [
      {
        path: '/',
        component: HomePage,
      },
      {
        path: '/about/',
        component: AboutPage,
      },
    ],
  },
});

উদাহরণ: About পৃষ্ঠা কম্পোনেন্ট

<template>
  <f7-page name="about">
    <f7-navbar title="About"></f7-navbar>
    <f7-block>
      <p>এই পৃষ্ঠাটি About পৃষ্ঠা।</p>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'AboutPage',
}
</script>

<style scoped>
/* আপনার কাস্টম স্টাইল এখানে লিখুন */
</style>

স্টেট ম্যানেজমেন্ট (Vuex) ব্যবহার

যদি আপনার অ্যাপ্লিকেশনে স্টেট ম্যানেজমেন্ট প্রয়োজন হয়, তাহলে Vuex ব্যবহার করতে পারেন। Framework7 CLI দ্বারা তৈরি প্রজেক্টে Vuex ইন্টিগ্রেশন থাকে।

উদাহরণ: Vuex স্টোর কনফিগারেশন

src/store/index.js:

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    user: null,
  },
  mutations: {
    setUser(state, user) {
      state.user = user;
    },
  },
  actions: {
    login({ commit }, user) {
      // লগইন লজিক
      commit('setUser', user);
    },
    logout({ commit }) {
      // লগআউট লজিক
      commit('setUser', null);
    },
  },
  getters: {
    isLoggedIn: state => !!state.user,
    getUser: state => state.user,
  },
});

src/main.js:

import store from './store';

new Vue({
  el: '#app',
  store,
  render: (h) => h(App),
  framework7: {
    // অন্যান্য কনফিগারেশন
  },
});

উদাহরণ: লগইন কম্পোনেন্ট

<template>
  <f7-page name="login">
    <f7-navbar title="Login"></f7-navbar>
    <f7-block>
      <f7-form>
        <f7-list form>
          <f7-list-input
            label="Username"
            type="text"
            placeholder="Enter username"
            v-model="username"
            required
          ></f7-list-input>
          <f7-list-input
            label="Password"
            type="password"
            placeholder="Enter password"
            v-model="password"
            required
          ></f7-list-input>
        </f7-list>
        <f7-button @click="login">Login</f7-button>
      </f7-form>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'LoginPage',
  data() {
    return {
      username: '',
      password: '',
    };
  },
  methods: {
    login() {
      if (this.username && this.password) {
        this.$store.dispatch('login', { username: this.username });
        this.$f7.dialog.alert('লগইন সফল হয়েছে!');
        this.$router.navigate('/');
      } else {
        this.$f7.dialog.alert('অনুগ্রহ করে সব ফিল্ড পূরণ করুন।');
      }
    },
  },
};
</script>

<style scoped>
/* আপনার কাস্টম স্টাইল এখানে লিখুন */
</style>

Framework7 এর সাথে Vue.js ব্যবহার করার কিছু টিপস

  1. কম্পোনেন্ট রিইউজ: Vue.js এর কম্পোনেন্ট ভিত্তিক কাঠামো ব্যবহার করে Framework7 এর UI উপাদানগুলি পুনরায় ব্যবহারযোগ্য কম্পোনেন্টে রূপান্তর করুন।
  2. স্টেট ম্যানেজমেন্ট: Vuex ব্যবহার করে অ্যাপ্লিকেশনের স্টেট ম্যানেজমেন্ট সহজ করুন, বিশেষ করে বড় অ্যাপ্লিকেশনের ক্ষেত্রে।
  3. রাউটিং কনফিগারেশন: Vue Router এবং Framework7 এর রাউটিং সিস্টেমের মধ্যে সুসংহততা নিশ্চিত করুন।
  4. ইভেন্ট হ্যান্ডলিং: Framework7 এর ইভেন্ট হ্যান্ডলিং ক্ষমতা ব্যবহার করে ইউজার ইন্টারঅ্যাকশন পরিচালনা করুন।
  5. স্টাইল কাস্টমাইজেশন: CSS বা CSS প্রিপ্রসেসর ব্যবহার করে Framework7 এর ডিফল্ট স্টাইল কাস্টমাইজ করুন আপনার অ্যাপ্লিকেশনের ব্র্যান্ডিং অনুযায়ী।

সম্পূর্ণ উদাহরণ: একটি সরল Framework7 + Vue.js অ্যাপ্লিকেশন

১. HomePage.vue

<template>
  <f7-page name="home">
    <f7-navbar title="হোম"></f7-navbar>
    <f7-block>
      <f7-button @click="goToAbout">About পৃষ্ঠা দেখুন</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'HomePage',
  methods: {
    goToAbout() {
      this.$router.navigate('/about/');
    },
  },
}
</script>

<style scoped>
/* আপনার কাস্টম স্টাইল এখানে লিখুন */
</style>

২. AboutPage.vue

<template>
  <f7-page name="about">
    <f7-navbar title="About"></f7-navbar>
    <f7-block>
      <p>এই পৃষ্ঠা Framework7 এবং Vue.js এর সংমিশ্রণের উদাহরণ।</p>
      <f7-button @click="goBack">ফিরে যান</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'AboutPage',
  methods: {
    goBack() {
      this.$router.back();
    },
  },
}
</script>

<style scoped>
/* আপনার কাস্টম স্টাইল এখানে লিখুন */
</style>

৩. App.vue

<template>
  <f7-app>
    <f7-view main>
      <router-view></router-view>
    </f7-view>
  </f7-app>
</template>

<script>
export default {
  name: 'App',
}
</script>

<style>
/* আপনার গ্লোবাল স্টাইল এখানে লিখুন */
</style>

Framework7 এবং Vue.js এর সংমিশ্রণ একটি শক্তিশালী এবং নমনীয় প্ল্যাটফর্ম প্রদান করে, যা আপনাকে আধুনিক এবং ইন্টারেক্টিভ মোবাইল ও ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। Framework7 এর নেটিভ-লুক এবং ফিল, Vue.js এর কম্পোনেন্ট ভিত্তিক আর্কিটেকচার এবং সহজ রাউটিং সিস্টেমের মাধ্যমে আপনি দ্রুত এবং কার্যকরী অ্যাপ্লিকেশন ডেভেলপ করতে পারবেন।

আপনার প্রজেক্ট শুরু করার জন্য Framework7 CLI এবং Vue.js এর ডকুমেন্টেশন অনুসরণ করতে পারেন। আরও বিস্তারিত তথ্যের জন্য Framework7 Vue ডকুমেন্টেশন এবং Vue.js ডকুমেন্টেশন পর্যালোচনা করতে পারেন।

Content added By

Vue Components এবং Reactive Data Management

296

Framework7 এর সাথে Vue.js ইন্টিগ্রেশন একটি শক্তিশালী কম্বিনেশন, যা আপনাকে রিচ এবং রিয়্যাক্টিভ মোবাইল ও ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। Vue.js এর কম্পোনেন্ট-ভিত্তিক আর্কিটেকচার এবং রিয়্যাক্টিভ ডেটা ম্যানেজমেন্ট Framework7 এর সাথে মিলে অত্যন্ত কার্যকরী এবং স্কেলেবল অ্যাপ্লিকেশন ডেভেলপমেন্ট সম্ভব করে তোলে।


১. Framework7 এবং Vue.js ইন্টিগ্রেশন

Framework7 এর Vue.js ইন্টিগ্রেশন ব্যবহার করে আপনি Vue এর সুবিধাগুলো Framework7 এর UI কম্পোনেন্টগুলোর সাথে একত্রিত করতে পারেন। এটি আপনাকে কম্পোনেন্ট ভিত্তিক স্ট্রাকচার, রিয়্যাক্টিভ ডেটা ম্যানেজমেন্ট, এবং Vue এর অন্যান্য সুবিধাগুলো উপভোগ করতে দেয়।

নতুন Framework7 Vue প্রজেক্ট তৈরি করা

Framework7 CLI ব্যবহার করে সহজেই একটি নতুন Vue ভিত্তিক প্রজেক্ট তৈরি করা যায়।

framework7 create

প্রম্পটের উত্তর দিন:

  1. Framework7 Framework: Framework7 with Vue.js
  2. App Name: আপনার অ্যাপের নাম
  3. App ID: com.example.myapp
  4. App Theme: iOS বা Material Design
  5. CSS Preprocessor: CSS, LESS, অথবা SASS
  6. Build Tool: Vite (অথবা Webpack)
  7. Include Cordova: হ্যাঁ/না (আপনার প্রয়োজন অনুযায়ী)

প্রজেক্ট তৈরি হওয়ার পর, প্রজেক্ট ডিরেক্টরিতে যান এবং ডিপেনডেন্সি ইনস্টল করুন:

cd your-project-name
npm install

ডেভেলপমেন্ট সার্ভার চালু করতে:

npm start

২. Vue কম্পোনেন্টস তৈরি এবং ব্যবহার

Vue কম্পোনেন্টস Framework7 অ্যাপ্লিকেশনে পুনরায় ব্যবহারযোগ্য UI উপাদান তৈরি করার একটি উপায়। প্রতিটি কম্পোনেন্ট নিজের টেমপ্লেট, লজিক এবং স্টাইল নিয়ে আসে।

কম্পোনেন্টের স্ট্রাকচার

একটি Vue কম্পোনেন্ট সাধারণত তিনটি অংশ নিয়ে গঠিত:

  1. Template: HTML কাঠামো
  2. Script: জাভাস্ক্রিপ্ট লজিক
  3. Style: CSS স্টাইল

উদাহরণ: একটি কাস্টম বাটন কম্পোনেন্ট

src/components/CustomButton.vue

<template>
  <button class="custom-button" @click="handleClick">
    {{ label }}
  </button>
</template>

<script>
export default {
  name: 'CustomButton',
  props: {
    label: {
      type: String,
      default: 'Click Me'
    }
  },
  methods: {
    handleClick() {
      this.$emit('clicked');
    }
  }
}
</script>

<style scoped>
.custom-button {
  background-color: #007bff;
  color: white;
  padding: 10px 20px;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}
.custom-button:hover {
  background-color: #0056b3;
}
</style>

কম্পোনেন্ট ব্যবহার করা

src/pages/Home.vue

<template>
  <f7-page>
    <f7-navbar title="Home"></f7-navbar>
    <f7-block>
      <custom-button label="Submit" @clicked="handleSubmit"></custom-button>
    </f7-block>
  </f7-page>
</template>

<script>
import CustomButton from '../components/CustomButton.vue';

export default {
  name: 'Home',
  components: {
    CustomButton
  },
  methods: {
    handleSubmit() {
      this.$f7.dialog.alert('Button Clicked!');
    }
  }
}
</script>

<style>
/* পেজের কাস্টম স্টাইল */
</style>

৩. Reactive Data Management (রিয়্যাক্টিভ ডেটা ম্যানেজমেন্ট)

Vue.js এর রিয়্যাক্টিভ ডেটা ম্যানেজমেন্ট আপনাকে ডেটা পরিবর্তন হলে স্বয়ংক্রিয়ভাবে UI আপডেট করতে সাহায্য করে। Framework7 এর সাথে Vue.js ব্যবহার করে আপনি সহজেই রিয়্যাক্টিভ ডেটা ম্যানেজমেন্ট করতে পারেন।

ডেটা ডিক্লেয়ার করা

src/pages/Home.vue

<template>
  <f7-page>
    <f7-navbar title="Reactive Data"></f7-navbar>
    <f7-block>
      <p>{{ message }}</p>
      <f7-input v-model="message" label="Update Message"></f7-input>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'Home',
  data() {
    return {
      message: 'Hello, Framework7 with Vue!'
    };
  }
}
</script>

<style>
/* পেজের কাস্টম স্টাইল */
</style>

উপরের উদাহরণে, message ডেটা প্রপার্টি Vue এর রিয়্যাক্টিভ সিস্টেমের মাধ্যমে ট্র্যাক করা হচ্ছে। যখনই ইনপুট পরিবর্তিত হয়, প্যারাগ্রাফে স্বয়ংক্রিয়ভাবে আপডেট হবে।


৪. Computed Properties এবং Watchers

Vue.js এর Computed Properties এবং Watchers ব্যবহার করে আরও জটিল ডেটা ম্যানেজমেন্ট করা যায়।

Computed Properties

Computed properties ডেটার উপর ভিত্তি করে ভ্যালু গণনা করে এবং এটি রিয়্যাক্টিভ হয়।

src/pages/Home.vue

<template>
  <f7-page>
    <f7-navbar title="Computed Properties"></f7-navbar>
    <f7-block>
      <f7-input v-model="firstName" label="First Name"></f7-input>
      <f7-input v-model="lastName" label="Last Name"></f7-input>
      <p>Full Name: {{ fullName }}</p>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'Home',
  data() {
    return {
      firstName: '',
      lastName: ''
    };
  },
  computed: {
    fullName() {
      return `${this.firstName} ${this.lastName}`;
    }
  }
}
</script>

<style>
/* পেজের কাস্টম স্টাইল */
</style>

Watchers

Watchers ডেটা পরিবর্তন পর্যবেক্ষণ করে এবং পরিবর্তনের উপর ভিত্তি করে ক্রিয়াকলাপ সম্পাদন করে।

src/pages/Home.vue

<template>
  <f7-page>
    <f7-navbar title="Watchers"></f7-navbar>
    <f7-block>
      <f7-input v-model="searchQuery" label="Search"></f7-input>
      <p>Search Query: {{ searchQuery }}</p>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'Home',
  data() {
    return {
      searchQuery: ''
    };
  },
  watch: {
    searchQuery(newQuery) {
      console.log('Search Query Changed:', newQuery);
      // এখানে আপনি API কল বা অন্যান্য অপারেশন করতে পারেন
    }
  }
}
</script>

<style>
/* পেজের কাস্টম স্টাইল */
</style>

৫. State Management with Vuex (ভিউএক্স ব্যবহার করে স্টেট ম্যানেজমেন্ট)

বড় অ্যাপ্লিকেশনগুলোর জন্য, Vuex ব্যবহার করে কেন্দ্রীয় স্টোরেজ সিস্টেম তৈরি করা যায় যা ডেটা ম্যানেজমেন্টকে আরও সুসংহত করে।

Vuex স্টোর সেটআপ করা

src/store/index.js

import { createStore } from 'vuex';

export default createStore({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  },
  actions: {
    increment({ commit }) {
      commit('increment');
    }
  },
  getters: {
    getCount(state) {
      return state.count;
    }
  }
});

Vuex স্টোর ইন্টিগ্রেট করা

src/main.js

import { createApp } from 'vue';
import Framework7 from 'framework7/lite-bundle';
import Framework7Vue from 'framework7-vue/bundle';
import App from './App.vue';
import store from './store';

import 'framework7/framework7-bundle.css';

const app = createApp(App);
app.use(Framework7Vue, { /* Framework7 options */ });
app.use(store);
app.mount('#app');

Vuex স্টোর ব্যবহার করা

src/pages/Home.vue

<template>
  <f7-page>
    <f7-navbar title="Vuex Example"></f7-navbar>
    <f7-block>
      <p>Count: {{ count }}</p>
      <f7-button @click="incrementCount">Increment</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
import { mapGetters, mapActions } from 'vuex';

export default {
  name: 'Home',
  computed: {
    ...mapGetters(['getCount']),
    count() {
      return this.getCount;
    }
  },
  methods: {
    ...mapActions(['increment']),
    incrementCount() {
      this.increment();
    }
  }
}
</script>

<style>
/* পেজের কাস্টম স্টাইল */
</style>

৬. Composition API (কম্পোজিশন এপিআই) ব্যবহার করে রিয়্যাক্টিভ ডেটা ম্যানেজমেন্ট

Vue.js 3 এর Composition API ব্যবহার করে আরও নমনীয় এবং পুনরায় ব্যবহারযোগ্য লজিক তৈরি করা যায়।

Composition API ব্যবহার করা

src/pages/Home.vue

<template>
  <f7-page>
    <f7-navbar title="Composition API"></f7-navbar>
    <f7-block>
      <f7-input v-model="title" label="Title"></f7-input>
      <p>{{ title }}</p>
    </f7-block>
  </f7-page>
</template>

<script>
import { ref } from 'vue';

export default {
  name: 'Home',
  setup() {
    const title = ref('Hello, Composition API with Framework7!');

    return {
      title
    };
  }
}
</script>

<style>
/* পেজের কাস্টম স্টাইল */
</style>

Framework7 এর সাথে Vue.js ব্যবহার করলে আপনি আধুনিক, রিয়্যাক্টিভ এবং রিচ ইউজার ইন্টারফেস তৈরি করতে সক্ষম হন। Vue কম্পোনেন্টস এবং রিয়্যাক্টিভ ডেটা ম্যানেজমেন্ট ব্যবহার করে আপনার অ্যাপ্লিকেশনকে আরও মডুলার, স্কেলেবল এবং রক্ষণাবেক্ষণযোগ্য করে তোলা সম্ভব। Vuex বা Composition API এর মাধ্যমে বড় এবং জটিল অ্যাপ্লিকেশনগুলোর জন্য স্টেট ম্যানেজমেন্টকে সহজ করা যায়।

কিছু গুরুত্বপূর্ণ পয়েন্ট:

  • কম্পোনেন্ট ভিত্তিক আর্কিটেকচার: UI উপাদানগুলোকে পুনরায় ব্যবহারযোগ্য কম্পোনেন্টসে ভাগ করা।
  • রিয়্যাক্টিভ ডেটা ম্যানেজমেন্ট: ডেটা পরিবর্তন হলে স্বয়ংক্রিয়ভাবে UI আপডেট হওয়া।
  • Vuex স্টোর: কেন্দ্রীয় স্টোরেজ সিস্টেম ব্যবহার করে ডেটা ম্যানেজমেন্ট সহজ করা।
  • Composition API: আরও নমনীয় এবং পুনরায় ব্যবহারযোগ্য লজিক তৈরি করা।

Framework7 এবং Vue.js এর এই সমন্বয় আপনাকে শক্তিশালী এবং ব্যবহার-বান্ধব অ্যাপ্লিকেশন তৈরি করতে সাহায্য করবে।

Content added By

Vue Router এর মাধ্যমে Routing এবং Navigation

239

Framework7-এ Vue.js এর সাথে Vue Router ব্যবহার করে আপনার অ্যাপ্লিকেশনের রাউটিং এবং নেভিগেশন পরিচালনা করা সহজ এবং কার্যকর। Vue Router একটি শক্তিশালী রাউটিং লাইব্রেরি যা Vue.js অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছে এবং এটি Framework7-এর সাথে seamlessly কাজ করতে পারে।

আগে যা জানা প্রয়োজন

  • Framework7 + Vue.js প্রজেক্ট সেটআপ করা আছে।
  • Node.js এবং NPM ইনস্টল করা আছে।
  • Vue Router সম্পর্কে কিছুটা ধারণা আছে।

ধাপ ১: নতুন Framework7 + Vue প্রজেক্ট তৈরি করা

যদি আপনার ইতিমধ্যে Framework7 + Vue প্রজেক্ট না থাকে, তাহলে Framework7 CLI ব্যবহার করে একটি নতুন প্রজেক্ট তৈরি করুন:

framework7 create

প্রম্পট অনুযায়ী Framework7 with Vue.js নির্বাচন করুন এবং অন্যান্য প্রয়োজনীয় অপশনগুলি নির্বাচন করুন।

ধাপ ২: Vue Router ইনস্টল করা

Framework7 CLI দিয়ে প্রজেক্ট তৈরি করার পর, Vue Router ইনস্টল করা প্রয়োজন হতে পারে। সাধারণত, Framework7 CLI ইতিমধ্যে Vue Router ইনস্টল করে দেয়, তবে নিশ্চিত হওয়ার জন্য নিচের কমান্ডটি চালাতে পারেন:

npm install vue-router@4

ধাপ ৩: Vue Router কনফিগার করা

src/router/index.js (অথবা যেখানে আপনার রাউটার ফাইল থাকে) ফাইলে Vue Router কনফিগার করুন।

উদাহরণ: src/router/index.js

import { createRouter, createWebHistory } from 'vue-router';
import HomePage from '../pages/HomePage.vue';
import AboutPage from '../pages/AboutPage.vue';
import ContactPage from '../pages/ContactPage.vue';

const routes = [
  {
    path: '/',
    name: 'Home',
    component: HomePage,
  },
  {
    path: '/about',
    name: 'About',
    component: AboutPage,
  },
  {
    path: '/contact',
    name: 'Contact',
    component: ContactPage,
  },
];

const router = createRouter({
  history: createWebHistory(),
  routes,
});

export default router;

ধাপ ৪: মূল অ্যাপ ফাইলে Router যুক্ত করা

src/main.js (অথবা যেখানে আপনার মূল জাভাস্ক্রিপ্ট ফাইল থাকে) ফাইলে Vue Router ইন্টিগ্রেট করুন।

উদাহরণ: src/main.js

import { createApp } from 'vue';
import Framework7 from 'framework7/lite-bundle';
import Framework7Vue from 'framework7-vue';
import App from './App.vue';
import router from './router';

// Framework7 Styles
import 'framework7/css/framework7.bundle.css';

// Create Vue App
const app = createApp(App);

// Use Framework7 and Vue
app.use(Framework7Vue);

// Use Router
app.use(router);

// Mount the App
app.mount('#app');

ধাপ ৫: App.vue এ Router View ব্যবহার করা

App.vue ফাইলে <router-view> কম্পোনেন্ট ব্যবহার করুন যেখানে আপনার পেজগুলি রেন্ডার হবে।

উদাহরণ: src/App.vue

<template>
  <f7-app>
    <f7-view main>
      <router-view></router-view>
    </f7-view>
  </f7-app>
</template>

<script>
export default {
  name: 'App',
};
</script>

<style>
/* আপনার স্টাইল এখানে */
</style>

ধাপ ৬: পেজ কম্পোনেন্ট তৈরি করা

আপনার পেজগুলি তৈরি করুন যা রাউটার দ্বারা রেন্ডার করা হবে। উদাহরণস্বরূপ, HomePage.vue, AboutPage.vue, এবং ContactPage.vue তৈরি করুন।

উদাহরণ: src/pages/HomePage.vue

<template>
  <f7-page>
    <f7-navbar title="Home" />
    <f7-block>
      <p>Welcome to the Home Page!</p>
      <f7-button @click="goToAbout">Go to About</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'HomePage',
  methods: {
    goToAbout() {
      this.$router.push({ name: 'About' });
    },
  },
};
</script>

<style scoped>
/* আপনার স্টাইল এখানে */
</style>

উদাহরণ: src/pages/AboutPage.vue

<template>
  <f7-page>
    <f7-navbar title="About" />
    <f7-block>
      <p>This is the About Page.</p>
      <f7-button @click="goToContact">Go to Contact</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'AboutPage',
  methods: {
    goToContact() {
      this.$router.push({ name: 'Contact' });
    },
  },
};
</script>

<style scoped>
/* আপনার স্টাইল এখানে */
</style>

উদাহরণ: src/pages/ContactPage.vue

<template>
  <f7-page>
    <f7-navbar title="Contact" />
    <f7-block>
      <p>This is the Contact Page.</p>
      <f7-button @click="goHome">Go to Home</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'ContactPage',
  methods: {
    goHome() {
      this.$router.push({ name: 'Home' });
    },
  },
};
</script>

<style scoped>
/* আপনার স্টাইল এখানে */
</style>

ধাপ ৭: নেভিগেশন এবং রাউটিং ব্যবহার করা

Vue Router ব্যবহার করে নেভিগেশন করা খুবই সহজ। আপনি বিভিন্ন পেজে যাওয়ার জন্য this.$router.push() বা <router-link> ব্যবহার করতে পারেন।

উদাহরণ: <router-link> ব্যবহার করা

<template>
  <f7-page>
    <f7-navbar title="Home" />
    <f7-block>
      <p>Welcome to the Home Page!</p>
      <router-link to="/about">
        <f7-button>Go to About</f7-button>
      </router-link>
    </f7-block>
  </f7-page>
</template>

উদাহরণ: this.$router.push() ব্যবহার করা

methods: {
  goToAbout() {
    this.$router.push({ name: 'About' });
  },
}

ধাপ ৮: নেভিগেশন গার্ডস ব্যবহার করা (ঐচ্ছিক)

Vue Router আপনাকে নেভিগেশন গার্ডস ব্যবহার করার সুযোগ দেয়, যা নির্দিষ্ট রাউটে যাওয়ার আগে কিছু চেক করতে সাহায্য করে। উদাহরণস্বরূপ, ইউজার লগইন করা হয়েছে কিনা চেক করা।

উদাহরণ: রাউট গার্ড সেটআপ

// src/router/index.js
import { createRouter, createWebHistory } from 'vue-router';
import HomePage from '../pages/HomePage.vue';
import AboutPage from '../pages/AboutPage.vue';
import ContactPage from '../pages/ContactPage.vue';
import LoginPage from '../pages/LoginPage.vue';

const routes = [
  { path: '/', name: 'Home', component: HomePage },
  { path: '/about', name: 'About', component: AboutPage },
  { path: '/contact', name: 'Contact', component: ContactPage, meta: { requiresAuth: true } },
  { path: '/login', name: 'Login', component: LoginPage },
];

const router = createRouter({
  history: createWebHistory(),
  routes,
});

// নেভিগেশন গার্ড
router.beforeEach((to, from, next) => {
  const isAuthenticated = false; // আপনার authentication লজিক এখানে
  if (to.meta.requiresAuth && !isAuthenticated) {
    next({ name: 'Login' });
  } else {
    next();
  }
});

export default router;

ধাপ ৯: পেজ ট্রানজিশন কাস্টমাইজ করা

Vue Router ব্যবহার করে পেজ ট্রানজিশন কাস্টমাইজ করা যায়। Framework7 এর সাথে এটি মিলে যায় এবং আরও আকর্ষণীয় করে তোলা যায়।

উদাহরণ: কাস্টম পেজ ট্রানজিশন

<template>
  <f7-app>
    <f7-view main>
      <router-view v-slot="{ Component }">
        <transition name="custom-fade">
          <component :is="Component" />
        </transition>
      </router-view>
    </f7-view>
  </f7-app>
</template>

<style>
.custom-fade-enter-active, .custom-fade-leave-active {
  transition: opacity 0.5s;
}
.custom-fade-enter-from, .custom-fade-leave-to {
  opacity: 0;
}
</style>

ধাপ ১০: উদাহরণ এবং সম্পূর্ণ কোড

সম্পূর্ণ উদাহরণ: src/App.vue

<template>
  <f7-app>
    <f7-view main>
      <router-view></router-view>
    </f7-view>
  </f7-app>
</template>

<script>
export default {
  name: 'App',
};
</script>

সম্পূর্ণ উদাহরণ: src/main.js

import { createApp } from 'vue';
import Framework7 from 'framework7/lite-bundle';
import Framework7Vue from 'framework7-vue';
import App from './App.vue';
import router from './router';

// Framework7 Styles
import 'framework7/css/framework7.bundle.css';

// Create Vue App
const app = createApp(App);

// Use Framework7 and Vue
app.use(Framework7Vue);

// Use Router
app.use(router);

// Mount the App
app.mount('#app');

সম্পূর্ণ উদাহরণ: src/router/index.js

import { createRouter, createWebHistory } from 'vue-router';
import HomePage from '../pages/HomePage.vue';
import AboutPage from '../pages/AboutPage.vue';
import ContactPage from '../pages/ContactPage.vue';
import LoginPage from '../pages/LoginPage.vue';

const routes = [
  { path: '/', name: 'Home', component: HomePage },
  { path: '/about', name: 'About', component: AboutPage },
  { path: '/contact', name: 'Contact', component: ContactPage, meta: { requiresAuth: true } },
  { path: '/login', name: 'Login', component: LoginPage },
];

const router = createRouter({
  history: createWebHistory(),
  routes,
});

// Navigation Guard
router.beforeEach((to, from, next) => {
  const isAuthenticated = false; // Replace with your auth logic
  if (to.meta.requiresAuth && !isAuthenticated) {
    next({ name: 'Login' });
  } else {
    next();
  }
});

export default router;

সম্পূর্ণ উদাহরণ: src/pages/HomePage.vue

<template>
  <f7-page>
    <f7-navbar title="Home" />
    <f7-block>
      <p>Welcome to the Home Page!</p>
      <f7-button @click="goToAbout">Go to About</f7-button>
      <f7-button @click="goToContact">Go to Contact</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'HomePage',
  methods: {
    goToAbout() {
      this.$router.push({ name: 'About' });
    },
    goToContact() {
      this.$router.push({ name: 'Contact' });
    },
  },
};
</script>

<style scoped>
/* আপনার স্টাইল এখানে */
</style>

সম্পূর্ণ উদাহরণ: src/pages/AboutPage.vue

<template>
  <f7-page>
    <f7-navbar title="About" />
    <f7-block>
      <p>This is the About Page.</p>
      <f7-button @click="goToHome">Go to Home</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'AboutPage',
  methods: {
    goToHome() {
      this.$router.push({ name: 'Home' });
    },
  },
};
</script>

<style scoped>
/* আপনার স্টাইল এখানে */
</style>

সম্পূর্ণ উদাহরণ: src/pages/ContactPage.vue

<template>
  <f7-page>
    <f7-navbar title="Contact" />
    <f7-block>
      <p>This is the Contact Page.</p>
      <f7-button @click="goToHome">Go to Home</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'ContactPage',
  methods: {
    goToHome() {
      this.$router.push({ name: 'Home' });
    },
  },
};
</script>

<style scoped>
/* আপনার স্টাইল এখানে */
</style>

সম্পূর্ণ উদাহরণ: src/pages/LoginPage.vue

<template>
  <f7-page>
    <f7-navbar title="Login" />
    <f7-block>
      <p>Please log in to continue.</p>
      <f7-button @click="login">Login</f7-button>
    </f7-block>
  </f7-page>
</template>

<script>
export default {
  name: 'LoginPage',
  methods: {
    login() {
      // আপনার লগইন লজিক এখানে
      // লগইন সফল হলে, অ্যাপের স্টেট আপডেট করুন
      // এবং হোম পেজে নেভিগেট করুন
      this.$router.push({ name: 'Home' });
    },
  },
};
</script>

<style scoped>
/* আপনার স্টাইল এখানে */
</style>

Vue Router ব্যবহার করে Framework7-এ রাউটিং এবং নেভিগেশন কনফিগার করা খুবই সহজ। এটি আপনাকে একটি সুশৃঙ্খল এবং মডুলার অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে, যেখানে বিভিন্ন পেজ এবং কম্পোনেন্টগুলি সহজেই নেভিগেট করা যায়। এই গাইডে উল্লেখিত ধাপগুলি অনুসরণ করে আপনি দ্রুত এবং কার্যকরভাবে Framework7 + Vue.js অ্যাপ্লিকেশনে Vue Router ইন্টিগ্রেট করতে পারবেন।

অতিরিক্ত টিপস

  1. নেস্টেড রাউটস (Nested Routes):
    আপনার অ্যাপ্লিকেশনে নেস্টেড রাউটস ব্যবহার করতে পারেন, যেখানে একটি পেজের মধ্যে আরেকটি পেজ লোড করা হয়।
  2. ডায়নামিক রাউটস (Dynamic Routes):
    ইউজার-নির্দিষ্ট পেজ বা ডেটা লোড করার জন্য ডায়নামিক রাউটস ব্যবহার করুন।
  3. নেভিগেশন গার্ডস (Navigation Guards):
    ইউজার অথেন্টিকেশন এবং অথরাইজেশন ম্যানেজমেন্টের জন্য নেভিগেশন গার্ডস ব্যবহার করুন।
  4. কাস্টম ট্রানজিশন:
    অ্যাপ্লিকেশনের ইউজার এক্সপেরিয়েন্স উন্নত করতে কাস্টম ট্রানজিশন এবং অ্যানিমেশন যুক্ত করুন।
Content added By

Vuex ব্যবহার করে State Management

250

Framework7-Vue অ্যাপ্লিকেশনে Vuex ব্যবহার করে State Management (স্টেট ম্যানেজমেন্ট) করা অত্যন্ত কার্যকর এবং সহজ। Vuex হলো Vue.js এর জন্য একটি স্টেট ম্যানেজমেন্ট প্যাটার্ন এবং লাইব্রেরি, যা অ্যাপ্লিকেশনের বিভিন্ন কম্পোনেন্টের মধ্যে ডেটা শেয়ার এবং নিয়ন্ত্রণ সহজ করে তোলে। এটি বিশেষত বড় এবং জটিল অ্যাপ্লিকেশনের জন্য উপযোগী, যেখানে অনেকগুলো কম্পোনেন্টের মধ্যে ডেটা ম্যানেজ করা প্রয়োজন হয়।


Vuex কী?

Vuex হলো একটি স্টেট ম্যানেজমেন্ট লাইব্রেরি যা Vue.js অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছে। এটি একটি কেন্দ্রীয় স্টোরেজ সরবরাহ করে যেখানে অ্যাপ্লিকেশনের সমস্ত স্টেট (ডেটা) সংরক্ষণ করা হয়। Vuex স্টোর ব্যবহার করে, ডেটা কম্পোনেন্টের মধ্যে সহজেই শেয়ার এবং ম্যানেজ করা যায়।

Vuex এর মূল ধারণা:

  • State: অ্যাপ্লিকেশনের কেন্দ্রীয় ডেটা।
  • Getters: স্টেট থেকে ডেটা ফেচ করতে ব্যবহার করা হয়।
  • Mutations: স্টেট পরিবর্তন করার একমাত্র উপায়।
  • Actions: অ্যাসিঙ্ক্রোনাস অপারেশন এবং মিউটেশন ট্রিগার করা।
  • Modules: বড় অ্যাপ্লিকেশনের জন্য স্টোরকে মডিউল আকারে বিভক্ত করা।

Framework7-Vue প্রজেক্টে Vuex সেটআপ করা

Framework7-Vue প্রজেক্টে Vuex ব্যবহার করতে, আপনাকে প্রথমে Vuex ইনস্টল এবং কনফিগার করতে হবে। নিচে ধাপগুলো বর্ণনা করা হলো:

১. Vuex ইনস্টল করা

প্রথমে, আপনার Framework7-Vue প্রজেক্টে Vuex ইনস্টল করতে হবে। টার্মিনালে নিম্নলিখিত কমান্ড রান করুন:

npm install vuex --save

২. Vuex স্টোর তৈরি করা

প্রজেক্টের মূল ডিরেক্টরিতে একটি store ফোল্ডার তৈরি করুন এবং তার মধ্যে index.js ফাইল তৈরি করুন।

src/store/index.js:

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    count: 0,
    user: {
      name: '',
      email: ''
    }
  },
  getters: {
    getCount: state => state.count,
    getUser: state => state.user
  },
  mutations: {
    increment(state) {
      state.count++;
    },
    setUser(state, payload) {
      state.user.name = payload.name;
      state.user.email = payload.email;
    }
  },
  actions: {
    increment({ commit }) {
      commit('increment');
    },
    updateUser({ commit }, userData) {
      commit('setUser', userData);
    }
  },
  modules: {
    // এখানে আপনি অন্যান্য মডিউল যুক্ত করতে পারেন
  }
});

৩. Vuex স্টোরকে অ্যাপ্লিকেশনে যুক্ত করা

src/main.js:

import Vue from 'vue';
import Framework7 from 'framework7/framework7.esm.bundle.js';
import Framework7Vue from 'framework7-vue/framework7-vue.esm.bundle.js';
import App from './App.vue';
import store from './store'; // Vuex স্টোর ইমপোর্ট করুন

// Framework7 এবং Framework7-Vue ইনিশিয়ালাইজ করা
Vue.use(Framework7Vue);

// Vue অ্যাপ্লিকেশন তৈরি এবং Vuex স্টোর যুক্ত করা
new Vue({
  store, // স্টোর যুক্ত করুন
  render: h => h(App),
}).$mount('#app');

Vuex স্টোর ব্যবহার করা

একবার Vuex স্টোর সেটআপ হয়ে গেলে, আপনি সহজেই আপনার কম্পোনেন্টগুলিতে স্টেট অ্যাক্সেস এবং মিউটেশন করতে পারেন।

১. স্টেট থেকে ডেটা ফেচ করা

src/components/Counter.vue:

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="incrementCount">Increment</button>
  </div>
</template>

<script>
export default {
  computed: {
    count() {
      return this.$store.getters.getCount;
    }
  },
  methods: {
    incrementCount() {
      this.$store.dispatch('increment');
    }
  }
}
</script>

২. মিউটেশন ব্যবহার করে স্টেট পরিবর্তন করা

src/components/UserProfile.vue:

<template>
  <div>
    <h2>User Profile</h2>
    <p>Name: {{ user.name }}</p>
    <p>Email: {{ user.email }}</p>
    <button @click="updateUser">Update User</button>
  </div>
</template>

<script>
export default {
  computed: {
    user() {
      return this.$store.getters.getUser;
    }
  },
  methods: {
    updateUser() {
      const newUser = {
        name: 'John Doe',
        email: 'john.doe@example.com'
      };
      this.$store.dispatch('updateUser', newUser);
    }
  }
}
</script>

৩. মডিউল ব্যবহার করা

বড় অ্যাপ্লিকেশনের জন্য, আপনি স্টোরকে মডিউল আকারে বিভক্ত করতে পারেন।

src/store/modules/counter.js:

const state = {
  count: 0
};

const getters = {
  getCount: state => state.count
};

const mutations = {
  increment(state) {
    state.count++;
  }
};

const actions = {
  increment({ commit }) {
    commit('increment');
  }
};

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
};

src/store/index.js:

import Vue from 'vue';
import Vuex from 'vuex';
import counter from './modules/counter'; // কন্ট্রোলার মডিউল ইমপোর্ট করুন

Vue.use(Vuex);

export default new Vuex.Store({
  modules: {
    counter
  }
});

src/components/CounterModule.vue:

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="incrementCount">Increment</button>
  </div>
</template>

<script>
export default {
  computed: {
    count() {
      return this.$store.getters['counter/getCount'];
    }
  },
  methods: {
    incrementCount() {
      this.$store.dispatch('counter/increment');
    }
  }
}
</script>

Best Practices for Using Vuex with Framework7-Vue

  1. Organize Store Modules: বড় প্রজেক্টে স্টোরকে মডিউল আকারে বিভক্ত করুন যাতে কোড মেইনটেইন করা সহজ হয়।
  2. Use Namespacing: মডিউলগুলোর জন্য নামস্পেস ব্যবহার করুন যাতে এক্সপোর্ট কনফ্লিক্ট এড়ানো যায়।
  3. Avoid Overusing State: শুধুমাত্র প্রয়োজনীয় ডেটা স্টোরে রাখুন। কম্পোনেন্টের নিজস্ব লোকাল স্টেট ব্যবহার করুন যেখানে সম্ভব।
  4. Use Getters Wisely: স্টোর থেকে ডেটা ফেচ করার জন্য গেটারস ব্যবহার করুন, সরাসরি স্টেট অ্যাক্সেস না করে।
  5. Commit Mutations, Dispatch Actions: মিউটেশন এবং অ্যাকশন এর মাধ্যমে স্টেট ম্যানেজমেন্ট করুন যাতে ডিবাগ করা সহজ হয়।
  6. Keep Actions Asynchronous: অ্যাকশনগুলি অ্যাসিঙ্ক্রোনাস অপারেশনের জন্য ব্যবহার করুন যেমন API কল করা।

সারাংশ

Vuex ব্যবহার করে Framework7-Vue অ্যাপ্লিকেশনে স্টেট ম্যানেজমেন্ট করা সহজ এবং কার্যকর। এটি অ্যাপ্লিকেশনের ডেটা শেয়ার এবং নিয়ন্ত্রণকে কেন্দ্রীয়করণ করে, যা বড় এবং জটিল প্রজেক্টের জন্য অত্যন্ত উপযোগী। Vuex স্টোর সেটআপ করা থেকে শুরু করে কম্পোনেন্টে স্টেট ব্যবহার এবং মডিউলিং পর্যন্ত সমস্ত ধাপগুলি অনুসরণ করে আপনি একটি সুসংগঠিত এবং মেইনটেইনেবল অ্যাপ্লিকেশন তৈরি করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...