DEV Community

Agus Sudarmanto
Agus Sudarmanto

Posted on

My IONIC Notes

# Setup

npm i -g @ionic/cli
ionic start myApp tabs --capacitor --type=angular
ionic generate [schematic] [name]

schematic: pages, components, directives, services
Enter fullscreen mode Exit fullscreen mode

## Slide using Swiper.JS

ionic start MySwiperApp blank --type=angular
cd ./MySwiperApp

npm i swiper@latest
Enter fullscreen mode Exit fullscreen mode

[1]. app.component.ts

...
import ....;

// Swiper.JS
import { register } from "swiper/element/bundle";
register();

@Component({
...
Enter fullscreen mode Exit fullscreen mode

[2]. banner.component.ts
To use a web component we now need to import the CUSTOM_ELEMENTS_SCHEMA

import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { IonicSlides } from '@ionic/angular/standalone';
@Component({
  selector: 'app-banner',
  templateUrl: './banner.component.html',
  standalone: true,
  schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class BannerComponent {
  swiperModules = [IonicSlides];
  banners = [
  {id: 1, banner: 'assets/banner/1.jpg', active: true},
  {id: 2, banner: 'assets/banner/2.jpg', active: true},
  {id: 3, banner: 'assets/banner/3.jpg', active: true},
  {id: 4, banner: 'assets/banner/4.jpg', active: true},
];
}
Enter fullscreen mode Exit fullscreen mode

[3]. banner.component.html

<swiper-container
      [loop]="true"
      [pagination]="true"
      autoplay="true"
    >
      @for (banner of banners(); track $index) {
      <swiper-slide>
        <img [src]="banner?.image" />
      </swiper-slide>
      }
</swiper-container>
Enter fullscreen mode Exit fullscreen mode

ref:

## Maps using Leaflet.JS

Install Leaflet package

npm i leaflet
Enter fullscreen mode Exit fullscreen mode

[1]. global.scss

@import "leaflet/dist/leaflet.css";
#map {
  height: 100%;
}
Enter fullscreen mode Exit fullscreen mode

[2]. leaflet.page.ts

import { Component, OnInit, OnDestroy } from "@angular/core";
import { CommonModule } from "@angular/common";
import { FormsModule } from "@angular/forms";
import {
  IonContent,
  IonHeader,
  IonTitle,
  IonToolbar,
} from "@ionic/angular/standalone";
import * as L from "leaflet";

@Component({
  selector: "app-leaflet",
  templateUrl: "./leaflet.page.html",
  styleUrls: ["./leaflet.page.scss"],
  standalone: true,
  imports: [
    IonContent,
    IonHeader,
    IonTitle,
    IonToolbar,
    CommonModule,
    FormsModule,
  ],
})
export class LeafletPage implements OnInit, OnDestroy {
  constructor() {}

  map: L.Map | undefined;

  ngOnInit() {
    this.loadMap();
  }

  ngOnDestroy() {
    if (this.map) {
      this.map.remove();
    }
  }

  private loadMap() {
    // Initialize the map and set default view
    this.map = L.map("map").setView([0, 0], 13);

    // Add OpenStreetMap tile layer
    L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
      attribution: "© OpenStreetMap contributors",
    }).addTo(this.map);

    // Get the user's current location
    this.map.locate({ setView: true, maxZoom: 16 });

    // Add event listener for location found
    this.map.on("locationfound", (event: L.LocationEvent) => {
      const { lat, lng } = event.latlng;

      // Add a marker for the current location
      const marker = L.marker([lat, lng]).addTo(this.map!);
      marker.bindPopup("You are here!").openPopup();

      // Create a polygon around the current location
      const radius = 500; // 500 meters
      const polygon = L.circle([lat, lng], {
        radius: radius,
        color: "blue",
        fillColor: "lightblue",
        fillOpacity: 0.5,
      }).addTo(this.map!);
    });

    // Handle location error
    this.map.on("locationerror", (error: L.ErrorEvent) => {
      alert("Location access denied or unavailable.");
    });
  }
}

Enter fullscreen mode Exit fullscreen mode

[3]. leaflet.page.html

<div id="map" style="height: 100%"></div>
Enter fullscreen mode Exit fullscreen mode

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs