كيف أبدأ في إنشاء مشروع Angular من الصفر

 الخطوة الأولى:

أقوم بإنشاء مشروع جديد من خلال GitHub




الخطوة الثانية:

أقوم بتعبئة حقول الإنشاء



الخطوة الثالثة:

أقوم بإنشاء مشروعي من خلال الأمر أدناه (يوضع هذا الأمر في الـ Terminal)

$ ng new aap



الخطوة الرابعة:

نقوم بنقل كافة الملفات إلى الـ Root





الخطوة الخامسة:

نقوم بالتعديل على ملف Angular.json ليكون بهذا الشكل

الكود بعد حذف جزء منه يكون هكذا:

            "outputPath": "dist/",





الخطوة السادسة:

استدعاء مكتبات الـ CSS المهمة عن طريق ملف index.html - يجب أن يكون على النحو التالي:

<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <title>منصة هواة الأحساء | Ahsa Amateur Platform</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <!-- Bootstrap -->
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"
    integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
    <!-- Primeflex (https://primeflex.org/installation) -->
    <link rel="stylesheet" href="https://unpkg.com/primeflex@latest/primeflex.css">
  <!-- (Animate Style) https://animate.style/ -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
  <!-- Google Fonts and Material Icons -->
  <link rel="preconnect" href="https://fonts.gstatic.com">
  <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

<!-- البحث العام -->
  <meta name="title" content="أسواق ومخابز اليحيى للمواد الغذائية">
  <meta name="author" content="م. عبدالله السالم">
  <meta name="url" content="https://al-yahya.sa">
  <meta name="domain" content="al-yahya.sa">
  <meta name="type" content="website">
  <meta name="description" content="نقدم لكم أفضل المنتجات بأفضل الأسعار - أسواق ومخابز اليحيى">
  <meta name="keywords"
    content="أسواق اليحيى, مخابز اليحيى, بوابة اليحيى, Al Yahya Foodstuff Supermarkets, Al Yahya Foodstuff, Al Yahya,Yahya Foodstuff Supermarkets,أسواق اليحيى للمواد الغذائية,اليحيى,يحيى للمواد الغذائية, مخابز يحيى">
  <meta name="image" content="https://al-yahya.sa/assets/img/logos/circle_logo.png">
  <!-- بحث وسائل التواصل -->
  <meta name="og:title" content="أسواق ومخابز اليحيى للمواد الغذائية">
  <meta name="og:url" content="https://al-yahya.sa">
  <meta name="og:type" content="website">
  <meta name="og:description" content="نقدم لكم أفضل المنتجات بأفضل الأسعار - أسواق ومخابز اليحيى">
  <meta name="og:image" content="https://al-yahya.sa/assets/img/logos/circle_logo.png">
  <!-- بحث منصة X -->
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:title" content="أسواق ومخابز اليحيى للمواد الغذائية">
  <meta name="twitter:url" content="https://al-yahya.sa">
  <meta name="twitter:domain" content="al-yahya.sa">
  <meta name="twitter:description" content="نقدم لكم أفضل المنتجات بأفضل الأسعار - أسواق ومخابز اليحيى">
  <meta name="twitter:image" content="https://al-yahya.sa/assets/img/logos/circle_logo.png">
</head>

<body>
  <app-root></app-root>
  <!-- Bootstrap js -->
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"
    integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz"
    crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
    integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
    crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"
    integrity="sha384-fbbOQedDUMZZ5KreZpsbe1LCZPVmfTnH7ois6mU1QK+m14rQ1l2bGBq41eYeM/fS"
    crossorigin="anonymous"></script>
</body>

</html>

الخطوة السابعة:

تثبيت ملفات اللغة

npm install @ngx-translate/core@14 --save

npm install @ngx-translate/http-loader@7 --save


لمزيد من التفاصيل اضغط هنا



الخطوة الثامنة:

تثبيت Angular Material

ng add @angular/material
ويمكنك ربط كافة أدوات Angular Material بمشروعك من خلال إشاء ملف باسم material.module.ts وربطه بملف app.module.ts

وهذا هو محتوى material.module.ts

import { NgModule } from '@angular/core';
import { MatButtonModule } from "@angular/material/button";
import { MatButtonToggleModule } from "@angular/material/button-toggle";
import { MatCheckboxModule } from "@angular/material/checkbox";
import { MatRadioModule } from "@angular/material/radio";
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatSidenavModule } from '@angular/material/sidenav';
import {MatIconModule} from '@angular/material/icon';
import { MatBadgeModule } from '@angular/material/badge'
import { MatListModule } from '@angular/material/list';
import { MatGridListModule } from '@angular/material/grid-list';
import { MatCardModule } from '@angular/material/card';
import { MatMenuModule } from '@angular/material/menu';
import { MatSnackBarModule } from "@angular/material/snack-bar";
import { MatSlideToggleModule } from "@angular/material/slide-toggle";
import { MatProgressBarModule } from "@angular/material/progress-bar";
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
import { MatDividerModule } from "@angular/material/divider";
import { MatExpansionModule } from "@angular/material/expansion";
import { MatTabsModule } from "@angular/material/tabs";
import { MatStepperModule } from "@angular/material/stepper";
import { MatFormFieldModule } from "@angular/material/form-field";
import { MatInputModule } from "@angular/material/input";
import { MatSelectModule } from "@angular/material/select";
import { MatAutocompleteModule } from "@angular/material/autocomplete";
import { MatDatepickerModule } from "@angular/material/datepicker";
import { MatNativeDateModule } from '@angular/material/core';
import { MatTooltipModule } from "@angular/material/tooltip";
import { MatDialogModule } from "@angular/material/dialog";
import { MatTableModule } from "@angular/material/table";
import {MatSortModule} from "@angular/material/sort";
import { MatPaginatorModule } from '@angular/material/paginator';
import {MatChipsModule} from '@angular/material/chips';
import {MatRippleModule} from '@angular/material/core';

const material = [
  MatRippleModule,
  MatButtonModule,
  MatButtonToggleModule,
  MatToolbarModule,
  MatSidenavModule,
  MatIconModule,
  MatListModule,
  MatGridListModule,
  MatCardModule,
  MatMenuModule,
  MatSnackBarModule,
  MatSlideToggleModule,
  MatProgressBarModule,
  MatProgressSpinnerModule,
  MatBadgeModule,
  MatDividerModule,
  MatExpansionModule,
  MatTabsModule,
  MatStepperModule,
  MatFormFieldModule,
  MatInputModule,
  MatSelectModule,
  MatAutocompleteModule,
  MatCheckboxModule,
  MatRadioModule,
  MatDatepickerModule,
  MatNativeDateModule,
  MatTooltipModule,
  MatDialogModule,
  MatTableModule,
  MatSortModule,
  MatPaginatorModule,
  MatChipsModule
];

@NgModule({
  imports: [material],
  exports: [material]
})
export class MaterialModule { }

هكذا طريق استيراد ملفات الـ Material عبر ملف app.module.ts




الخطوة التاسعة:

تثبيت Primeng (هناك المزيد من التعليمات عند النقر على اسم الـ Material)

npm install primeng@15.0.1 --force
ويمكنك ربط كافة أدوات primeng بمشروعك من خلال إشاء ملف باسم primeng.module.ts وربطه بملف app.module.ts

وهذا هو محتوى primeng.module.ts

import { NgModule } from '@angular/core';
import { AutoCompleteModule } from 'primeng/autocomplete';
import { CalendarModule } from 'primeng/calendar';
import { CascadeSelectModule } from 'primeng/cascadeselect';
import { CheckboxModule } from 'primeng/checkbox';
import { ChipsModule } from 'primeng/chips';
import { ColorPickerModule } from 'primeng/colorpicker';
import { DropdownModule } from 'primeng/dropdown';
import { EditorModule } from 'primeng/editor';
import { InputTextModule } from 'primeng/inputtext';
import { RadioButtonModule } from 'primeng/radiobutton';
import { InputMaskModule } from 'primeng/inputmask';
import { InputSwitchModule } from 'primeng/inputswitch';
import { InputTextareaModule } from 'primeng/inputtextarea';
import { InputNumberModule } from 'primeng/inputnumber';
import { KnobModule } from 'primeng/knob';
import { KeyFilterModule } from 'primeng/keyfilter';
import { ListboxModule } from 'primeng/listbox';
import { MultiSelectModule } from 'primeng/multiselect';
import { PasswordModule } from 'primeng/password';
import { RatingModule } from 'primeng/rating';
import { SelectButtonModule } from 'primeng/selectbutton';
import { SliderModule } from 'primeng/slider';
import { TreeSelectModule } from 'primeng/treeselect';
import { TriStateCheckboxModule } from 'primeng/tristatecheckbox';
import { ToggleButtonModule } from 'primeng/togglebutton';
import { ButtonModule } from 'primeng/button';
import { SplitButtonModule } from 'primeng/splitbutton';
import { SpeedDialModule } from 'primeng/speeddial';
import { TableModule } from 'primeng/table';
import { DataViewModule, DataViewLayoutOptions } from 'primeng/dataview';
import { ScrollerModule } from 'primeng/scroller';
import { OrderListModule } from 'primeng/orderlist';
import { OrganizationChartModule } from 'primeng/organizationchart';
import { PaginatorModule } from 'primeng/paginator';
import { PickListModule } from 'primeng/picklist';
import { TreeModule } from 'primeng/tree';
import { TreeTableModule } from 'primeng/treetable';
import { TimelineModule } from 'primeng/timeline';
import { VirtualScrollerModule } from 'primeng/virtualscroller';
import { AccordionModule } from 'primeng/accordion';
import { CardModule } from 'primeng/card';
import { DividerModule } from 'primeng/divider';
import { FieldsetModule } from 'primeng/fieldset';
import { PanelModule } from 'primeng/panel';
import { SplitterModule } from 'primeng/splitter';
import { ScrollPanelModule } from 'primeng/scrollpanel';
import { TabViewModule } from 'primeng/tabview';
import { ToolbarModule } from 'primeng/toolbar';
import { ConfirmDialogModule } from 'primeng/confirmdialog';
import { ConfirmPopupModule } from 'primeng/confirmpopup';
import { DialogModule } from 'primeng/dialog';
import { DynamicDialogModule } from 'primeng/dynamicdialog';
import { OverlayPanelModule } from 'primeng/overlaypanel';
import { SidebarModule } from 'primeng/sidebar';
import { TooltipModule } from 'primeng/tooltip';
import { FileUploadModule } from 'primeng/fileupload';
import { BreadcrumbModule } from 'primeng/breadcrumb';
import { ContextMenuModule } from 'primeng/contextmenu';
import { DockModule } from 'primeng/dock';
import { MenuModule } from 'primeng/menu';
import { MenubarModule } from 'primeng/menubar';
import { MegaMenuModule } from 'primeng/megamenu';
import { PanelMenuModule } from 'primeng/panelmenu';
import { SlideMenuModule } from 'primeng/slidemenu';
import { StepsModule } from 'primeng/steps';
import { TabMenuModule } from 'primeng/tabmenu';
import { TieredMenuModule } from 'primeng/tieredmenu';
import { ChartModule } from 'primeng/chart';
import { MessagesModule } from 'primeng/messages';
import { ToastModule } from 'primeng/toast';
import { CarouselModule } from 'primeng/carousel';
import { GalleriaModule } from 'primeng/galleria';
import { ImageModule } from 'primeng/image';
import { DragDropModule } from 'primeng/dragdrop';
import { AvatarModule } from 'primeng/avatar';
import { BadgeModule } from 'primeng/badge';
import { BlockUIModule } from 'primeng/blockui';
import { ChipModule } from 'primeng/chip';
import { InplaceModule } from 'primeng/inplace';
import { ScrollTopModule } from 'primeng/scrolltop';
import { SkeletonModule } from 'primeng/skeleton';
import { ProgressBarModule } from 'primeng/progressbar';
import { ProgressSpinnerModule } from 'primeng/progressspinner';
import { TagModule } from 'primeng/tag';
import { TerminalModule } from 'primeng/terminal';
import { DeferModule } from 'primeng/defer';
import { FocusTrapModule } from 'primeng/focustrap';
import { StyleClassModule } from 'primeng/styleclass';
import { RippleModule } from 'primeng/ripple';
import { AutoFocusModule } from 'primeng/autofocus';
import { AnimateModule } from 'primeng/animate';
import { OverlayModule } from 'primeng/overlay';


const material = [
  ButtonModule,
  AutoCompleteModule,
  CalendarModule,
  CascadeSelectModule,
  CheckboxModule,
  ChipsModule,
  ColorPickerModule,
  DropdownModule,
  // EditorModule,
  InputTextModule,
  RadioButtonModule,
  InputMaskModule,
  InputSwitchModule,
  InputTextareaModule,
  InputNumberModule,
  KnobModule,
  KeyFilterModule,
  ListboxModule,
  MultiSelectModule,
  PasswordModule,
  RatingModule,
  SelectButtonModule,
  SliderModule,
  TreeSelectModule,
  TriStateCheckboxModule,
  ToggleButtonModule,
  SplitButtonModule,
  SpeedDialModule,
  TableModule,
  DataViewModule,
  ScrollerModule,
  OrderListModule,
  OrganizationChartModule,
  PaginatorModule,
  PickListModule,
  TreeModule,
  TreeTableModule,
  TimelineModule,
  VirtualScrollerModule,
  AccordionModule,
  CardModule,
  DividerModule,
  FieldsetModule,
  PanelModule,
  SplitterModule,
  ScrollPanelModule,
  TabViewModule,
  ToolbarModule,
  ConfirmDialogModule,
  ConfirmPopupModule,
  DialogModule,
  DynamicDialogModule,
  OverlayPanelModule,
  SidebarModule,
  TooltipModule,
  FileUploadModule,
  BreadcrumbModule,
  ContextMenuModule,
  DockModule,
  MenuModule,
  MenubarModule,
  MegaMenuModule,
  PanelMenuModule,
  SlideMenuModule,
  StepsModule,
  TabMenuModule,
  TieredMenuModule,
  // ChartModule,
  MessagesModule,
  ToastModule,
  CarouselModule,
  GalleriaModule,
  ImageModule,
  DragDropModule,
  AvatarModule,
  BadgeModule,
  BlockUIModule,
  ChipModule,
  InplaceModule,
  ScrollTopModule,
  SkeletonModule,
  ProgressBarModule,
  ProgressSpinnerModule,
  TagModule,
  TerminalModule,
  DeferModule,
  FocusTrapModule,
  StyleClassModule,
  RippleModule,
  AutoFocusModule,
  AnimateModule,
  OverlayModule,
];

@NgModule({
  imports: [material],
  exports: [material]
})
export class PrimengModule { }



الخطوة العاشرة:

إضافة الخطوط وملفات الـ assets

يمكنك تنزيل محتويات المجلد هذا ووضعه في مجلد الـ assets الموجود في مشروعك، ولا تنسى ربط ملف متغيرات الـ css

/*
@import "src/assets/scss/_variables";
*/

/* You can add global styles to this file, and also import other style files */

@font-face {
  font-family: 'Bukra-Regular';
  /* ../../webfonts/DroidKufi-Regular.ttf */
  src: url('../fonts/29LTBukraRegular3.otf') format('truetype');
}

//Old Variables
// $primary-color: #3695A1;//#3d535f - #3695A1
// $accent-color: #A16537;//#7f00ff#A16537
// $warn-color: #FCF182;//#FCF182
$border-color: #CCCCCC;

//New Variables
$primary-color: #F6F6F6; //#3d535f - #3695A1
$accent-color: #F9EEE3; //4AC0EE#7f00ff #A16537 #304FFE
$warn-color: #957242; //FFC220#FCF182



$alyahya-font: 'Bukra-Regular';
$basic-color: #fff;
$basic-color-2: #000;
$basic-color-light: lighten($basic-color, 5%);
$basic-color-dark: darken($basic-color, 15%);

$primary-color-light: lighten($primary-color, 5%);
$primary-color-dark: darken($primary-color, 15%);

//
$accent-color-light: lighten($accent-color, 7%);
$accent-color-dark: darken($accent-color, 7%);

$warn-color-light: lighten($accent-color, 7%);
$warn-color-dark: darken($accent-color, 7%);


$primary-bakery-color: #654530;
//7f00ff

$overlay: rgba(0, 0, 0, 0.5);
$body-color: #fafafa;
$divider-color: #dddddd;
$font-color-light: #d5d5d5;
$font-color-dark: #606060;
$p-color: #606060;


$font-weight-thin: 100;
$font-weight-extra-light: 200;
$font-weight-light: 300;
$font-weight-normal: 400;
$font-weight-medium: 500;
$font-weight-semi-bold: 600;
$font-weight-bold: 700;
$font-weight-extra-bold: 800;
$font-weight-ultra-bold: 900;


$hover-box-shadow: 0 15px 25px 0 rgba(0, 0, 0, 0.16), 0 10px 15px 0 rgba(0, 0, 0, 0.12);
$navigation-box-shadow: 0px 0px 3px 1px $primary-color-dark;
$box-shadow: 0px 1px 5px 2px #7d7d7d;
$text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.29);
$card-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);

//Social Media Color
$twitter-color: #4c6ef5;
$twitter-background: aliceblue;

$facebook-color: #3b5998;
$facebook-background: #eceff5;

$whatsapp-color: #25D366;
$whatsapp-background: #cef5dc;

$telegram-color: #4c6ef5;

$telegram-background: aliceblue; 




الخطوة الحادية عشرة:

البدء في المشروع من خلال إنشاء قائمة جانبية عن طريق الأمر: للمزيد من هنا

ng generate @angular/material:navigation nav


الآن يمكنك أن تبدأ في مشروعك الأول ونصيحتنا لك أن يكون ترتيب مجلدات مشروعك بهذا النحو الجميل:




الخطوة الثانية عشرة:

يجب أن يكون محتوى ملف الـ style.css بهذا النحو:

/* You can add global styles to this file, and also import other style files */
@import "src/assets/scss/_variables";

* :not(mat-icon) {
    font-family: $primary-font !important;
}

html,
body {
    height: 100%;
}
body {
    margin: 0;
    font-family: $primary-font, "Helvetica Neue", sans-serif;
}



الخطوة الثالثة عشرة:

حل مشكلة الرفع على Netlify.app من خلال قراءة المشاركة التالية: هنا



الخطوة الرابعة عشر:

ضبط ملف tsconfig.json كالتالي:

/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
  "emitDecoratorMetadata": true,
  "compileOnSave": false,
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "strictPropertyInitialization": false,
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "strictNullChecks": false,
    "noImplicitOverride": true,
    "noPropertyAccessFromIndexSignature": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "allowJs": true,
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "ES2022",
    "module": "ES2022",
    "useDefineForClassFields": false,
    "esModuleInterop": true,
    "lib": [
      "ES2022",
      "dom"
    ]
  },
  "angularCompilerOptions": {
    "enableIvy": false,
    "fullTemplateTypeCheck": true,
    "enableI18nLegacyMessageIdFormat": false,
    "strictInjectionParameters": true,
    "strictInputAccessModifiers": true,
    "strictTemplates": true
  }
}






تعليقات

المشاركات الشائعة من هذه المدونة

ngx-extended-pdf-viewer

how to getting access token for https://fcm.googleapis.com/v1/projects/al-ayahya-co/messages:send for angular and backend nestjs

طريقة تفعيل زر Inline Keyboard في Telegram Bot