10-04-2019, 08:35 PM | #1 |
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
|
تاريخ التسجيل: Feb 2019
العمر: 38
المشاركات: 1,149
التقييم: 10
لماذا الخدمات في أنجولار ؟
التوثيق الرسمي لأنجولار يقول بأنه لا يجب على المكونات (Components) جلب البيانات أو حفظها بشكل مباشر، بل من المفترض أن يتم تفويض هذه المهمة للخدمات (Services) لكي نركز في المكونات فقط على تقديم وعرض هذه البيانات للمستخدم.
Components shouldn’t fetch or save data directly and they certainly shouldn’t knowingly present fake data. They should focus on presenting data and delegate data access to a service. في هذا الدرس سنقوم بتطبيق هذه الفكرة عن طريق جلب بيانات وهمية (fake data) من خادم بعيد (Remote server) وإظهارها في الصفحة الرئيسية لتطبيقنا.سنقوم باستخدام واجهة JSONPlaceholder لهذا الغرض. من خلال النقطة posts/ نستطيع جلب عدد من المقالات الوهمية، كل مقال يكون على الشكل التالي : { "userId": 1, "id": 1, "title": "Sunt aut facere repellat", "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam." } 1 2 3 4 5 6 { "userId": 1, "id": 1, "title": "Sunt aut facere repellat", "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam." } نحن سنعرض فقط العنون title، ففي النهاية غرضنا الوحيد هو أن نتعلم كيف نقوم باستخدام Services لجلب البيانات وتقديمها للمكونات. إنشاء مشروع جديد لنقم أولا بإنشاء مشروع جديد بواسطة Angular CLI من خلال تنفيذ هذا الأمر على Terminal : ng new angular-services 1 ng new angular-services angular-services هو اسم المشروع ويمكنك طبعا اختيار الإسم الذي تريده. بعد إنتهاء إعداد المشروع، سنقوم بالدخول إلى المجلد angular-services عن طريق الأمر : cd angular-services 1 cd angular-services بعد ذلك نقوم بتنفيذ الأمر ng serve –watch حتى يمكننا فتح المشروع على المتصفح من خلال الرابط : http://localhost:4200. ستظهر الصفحة الرئيسية الإفتراضية، وسنقوم فيما بعد بالتعديل عليها. إنشاء الخدمة PostService سنقوم بإنشاء الخدمة PostService عن طريق نافذة الأوامر السطرية : ng generate service post 1 ng generate service post هذا الأمر سيقوم بإنشاء ملفين :
import { Injectable } from '@angular/core'; @Injectable() export class PostService { constructor() { } } 1 2 3 4 5 6 7 8 import { Injectable } from '@angular/core'; @Injectable() export class PostService { constructor() { } } نلاحظ أن الكلاس PostService مسبوقة بالمصمم injectable@، هذا ضروري في تطبيقات أنجولار. جلب البيانات بواسطة Ajax 1. إعداد الملف app.module.ts لجلب البيانات باستخدام تقنية Ajax يلزمنا اضافة وحدة جديدة للمشروع إسمها HttpClientModule وذلك من الملف app.module.ts. بعد استيراد الوحدة HttpClientModule لا يجب أن ننسى إضافتها إلى المصفوفة imports في المصمم NgModule@ : import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { HttpClientModule } from '@angular/common/http'; import { AppComponent } from './app.component'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, HttpClientModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { HttpClientModule } from '@angular/common/http'; import { AppComponent } from './app.component'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, HttpClientModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { } 2. إعداد الملف post.service.ts بعد ذلك سنعود إلى PostService ونقوم باستيراد الكائن HttpClient. هذا الأخير هو الذي يستخدم للقيام بطلبات أجاكس في إطار العمل أنجولار. أولا سنقوم بحقنه (Inject) داخل Constructor الخاص بالكلاس PostService، ثم نقوم باستخدامه داخل الدالة fetchPosts التي سنقوم بإنشائها، بحيث تكون مهمتها الوحيدة هي جلب المقالات من الواجهة البرمجية REST API. import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Injectable() export class PostService { constructor(private HttpClient:HttpClient) { } fetchPosts(){ return this.HttpClient.get("https://jsonplaceholder.typicode.com/posts"); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; @Injectable() export class PostService { constructor(private HttpClient:HttpClient) { } fetchPosts(){ return this.HttpClient.get("https://jsonplaceholder.typicode.com/posts"); } } 2. إعداد الملف app.component.ts الملف app.component.ts سبق إنشاؤه من قبل Angular CLI عندما قمنا بتوليد المشروع، وفيه يوجد الكلاس AppComponent المسؤول عن المكون الرئيسي للتطبيق.
1 2 3 export class AppComponent implements OnInit { ... } ngOnInit هي جزء مما يسمى دورة حياة المكونات في أنجولار. والكود الذي نضعه بداخلها يتم تنفيذه بمجرد إنشاء وإعداد المكون. ngOnInit هي المكان الأفضل للقيام بطلبات الأجاكس التي يحتجاها المكون في بداية حياته، ولا ينصح أبدا بالقيام بمثل هذه الأمور في Constructor.بعد إتمام كل هذه الخطوات، يفترض أن يكون شكل الملف app.component.ts على هذا النحو : import { Component, OnInit } from '@angular/core'; import { PostService } from './post.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], providers : [PostService] }) export class AppComponent implements OnInit { public posts: any; constructor (private postService: PostService) { } ngOnInit() { this.getPosts(); } getPosts(){ this.postService.fetchPosts().subscribe(data => { this.posts = data; }); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import { Component, OnInit } from '@angular/core'; import { PostService } from './post.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], providers : [PostService] }) export class AppComponent implements OnInit { public posts: any; constructor (private postService: PostService) { } ngOnInit() { this.getPosts(); } getPosts(){ this.postService.fetchPosts().subscribe(data => { this.posts = data; }); } } 4. عرض البيانات في واجهة المستخدم الآن لم يبقى لنا سوى عرض البيانات التي حصلنا عليها في واجهة المستخدم UI. وسيلتنا لذلك هي القالب app.component.html الخاص بالمكون AppComponent. سنمسح كل الأكواد الإفتراضية الموجدة في هذا الملف ولنجعله فارغا. كل ما سنقوم بعرضه هو عناوين المقالات التي حصلنا عليها من الواجهة البرمجية، والتي كما تتذكرون استقبلناها في الخاصية posts. <h2 *ngFor="let post of posts"> - {{post.title}} </h2> 1 2 3 <h2 *ngFor="let post of posts"> - {{post.title}} </h2> ترون بأننا استخدمنا الحلقة ngFor* التي يتيحها أنجولار من أجل قراءة المصفوفة posts وعرض العناوين داخل وسوم <h2>. بعد تحديث المتصفح سنرى بأن عناوين المقالات معروضة وفق المتوقع. تعلمنا معا من خلال هذا الدرس كيف نقوم بإنشاء الخدمات في إطار العمل Angular، ورأينا كيف نقوم بحقنها للمكونات لجلب البيانات التي تحتاجاها. هذه الخدمات تكرس مبدأ مهما في البرمجة، وهو مبدأ المسؤولية الواحدة Single Responsibility Principle، بحيث أن كل جزء من التطبيق مسؤول عن مهام محددة بدقة، وكلما تم توزيع المهام بشكل أفضل كلما كان الكود أكثر تنظيما وقابلية للفهم والقراءة والصيانة. المصدر: منتديات رحيل لكل العرب - من قسم: قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress |
اقتباس |
أضف رد جديد |
الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1) | |
|
|
المواضيع المتشابهه | ||||
الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
تحذير شراء هذه الخدمات من خمسات | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 1 | 27-07-2019 10:46 AM |
لماذا نسير على هذا التوزيع المعين للوقت , لماذا يتكون الأسبوع من سبعة أيام | مهرة النجدية | المواضيع العامة | 1 | 09-07-2019 12:51 PM |
لماذا يحمر وجهك عندما تخجل , رهاب الاحمرار | مهرة النجدية | المواضيع العامة | 1 | 09-07-2019 12:45 PM |
مكونات إطار العمل أنجولار (Angular) | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 10-04-2019 08:40 PM |
تعرف علي اهمية الخدمات (Services) في إطار العمل Angular | raheel | قسم تطوير المواقع ومحركات البحث والسيو Seo والووردبريس WordPress | 0 | 01-04-2019 06:35 PM |