角度学習:実践サービス


ここでは、2つのコンポーネント、アクティブなユーザーと非アクティブなユーザーと角度アプリケーションを持っている.アクティブユーザー2名と非アクティブユーザ2人がいます.クリック可能なSet to activeおよびSet to inactiveを使用して、アクティブと非アクティブの間でユーザーを切り替えることができます.
目的は、サービスを作成し、同じ結果を得ることです.

アクティブユーザコード:


import { Component, EventEmitter, Input, Output } from '@angular/core';

@Component({
  selector: 'app-active-users',
  templateUrl: './active-users.component.html',
  styleUrls: ['./active-users.component.css']
})
export class ActiveUsersComponent {
  @Input() users: string[];
  @Output() userSetToInactive = new EventEmitter<number>();

  onSetToInactive(id: number) {
    this.userSetToInactive.emit(id);
  }
}
<h3>Active Users</h3>
<ul class="list-group">
  <li
    class="list-group-item"
    *ngFor="let user of users; let i = index">
    {{ user }} | <a href="#" (click)="onSetToInactive(i)">Set to Inactive</a>
  </li>
</ul>
したがって、このコンポーネントはユーザーをリストします、そして、非アクティブにユーザをセットするクリック可能です.

無効なユーザーコード:


import { Component, EventEmitter, Input, Output } from '@angular/core';

@Component({
  selector: 'app-inactive-users',
  templateUrl: './inactive-users.component.html',
  styleUrls: ['./inactive-users.component.css']
})
export class InactiveUsersComponent {
  @Input() users: string[];
  @Output() userSetToActive = new EventEmitter<number>();

  onSetToActive(id: number) {
    this.userSetToActive.emit(id);
  }
}
<h3>Inactive Users</h3>
<ul class="list-group">
  <li
    class="list-group-item"
    *ngFor="let user of users; let i = index">
    {{ user }} | <a href="#" (click)="onSetToActive(i)">Set to Active</a>
  </li>
</ul>
アクティブユーザーと同じように、Clickableがクリックされると、ユーザーがアクティブに設定されます.

アプリケーションコンポーネント


import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  activeUsers = ['Max', 'Anna'];
  inactiveUsers = ['Chris', 'Manu'];

  onSetToInactive(id: number) {
    this.inactiveUsers.push(this.activeUsers[id]);
    this.activeUsers.splice(id, 1);
  }

  onSetToActive(id: number) {
    this.activeUsers.push(this.inactiveUsers[id]);
    this.inactiveUsers.splice(id, 1);
  }
}

サービスの利用


我々は、同じサービスを使用して取得することができます.すべての新しいサービスを作成し、これらのサービスをコンポーネントで使用する必要があります.

新しいサービスの作成


私たちは、新しいサービスを作成するために、ng g s <servicename>コマンドを使用できます.
  • ユーザーサービス.サービスTS
  • import { Injectable } from '@angular/core';
    import { CounterService } from './counter.service';
    
    @Injectable({
      providedIn: 'root'
    })
    export class UserServiceService {
    
      constructor(private counterService : CounterService) { }
    
      activeUsers = ['Max', 'Anna'];
      inactiveUsers = ['Chris', 'Manu'];
    
      setToActive(id: number) {
        this.activeUsers.push(this.inactiveUsers[id]);
        this.inactiveUsers.splice(id, 1);
        this.counterService.incrementActiveToInactiveCounter();
      }
    
      setToInactive(id: number) {
        this.inactiveUsers.push(this.activeUsers[id]);
        this.activeUsers.splice(id, 1);
        this.counterService.incrementInActiveToActiveCounter();
      }
    
    }
    
  • カウンター.サービスTS
  • import { Injectable } from '@angular/core';
    
    @Injectable({
      providedIn: 'root'
    })
    export class CounterService {
    
      activeToInactiveCounter = 0;
      inActiveToActiveCounter = 0;
    
      incrementActiveToInactiveCounter() {
        this.activeToInactiveCounter++;
        console.log("Active to Inactive Count:" + this.activeToInactiveCounter);
      }
    
      incrementInActiveToActiveCounter() {
        this.inActiveToActiveCounter++;
        console.log("Inactive to Active Count:" + this.inActiveToActiveCounter);
      }
      constructor() { }
    }
    
    
  • アクティブユーザーコンポーネント.TS
  • import { Component, OnInit } from '@angular/core';
    import { UserServiceService } from '../user-service.service';
    
    @Component({
      selector: 'app-active-users',
      templateUrl: './active-users.component.html',
      styleUrls: ['./active-users.component.css']
    })
    export class ActiveUsersComponent implements OnInit{
      users: string[];
    
      constructor(private userService:UserServiceService){}
      onSetToInactive(id: number) {
        this.userService.setToInactive(id);
      }
    
      ngOnInit() {
        this.users = this.userService.activeUsers;
      }
    }
    
  • 非アクティブなユーザーコンポーネント.TS
  • import { Component, OnInit } from '@angular/core';
    import { UserServiceService } from '../user-service.service';
    
    @Component({
      selector: 'app-inactive-users',
      templateUrl: './inactive-users.component.html',
      styleUrls: ['./inactive-users.component.css']
    })
    export class InactiveUsersComponent implements OnInit{
      users: string[];
    
      constructor(private userService: UserServiceService) {}
    
      onSetToActive(id: number) {
        this.userService.setToActive(id);
      }
    
      ngOnInit() {
        this.users = this.userService.inactiveUsers;
      }
    }
    
  • アプリのコンポーネント.TS
  • import { Component } from '@angular/core';
    import { UserServiceService } from './user-service.service';
    
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css'],
      providers: [UserServiceService]
    })
    export class AppComponent {
    
    }
    
    したがって、これはサービスの使用のための単純なユースケースです.

    Rohithv 07 / 角の余分の材料


    以上の手でいくつかの機能をカバー


    角の余分の材料


    以上の手でいくつかの機能をカバー

    npm install --save-dev @angular-devkit/build-angular


    npm install --save bootstrap@3


    データバインド


    指令


    ngFor, ngIf, ngStyle, ngClass


    Using renderer


    Using HostListener


    Using HostBinding


    Building structural directive


    サービス


    Logging Service and injecting


    Data Service


    Injecting Services into Services @Injectable()


    Services for Cross - component communication


    ルーティング


    Setting and loading routes


    Router Links


    Navigation Paths and styling active router links


    Passing parameters to Routes


    Fetch Route parameters, also Reactively


    Query paramaters, Fragments


    Nested Routes


    Redirecting and wildcards


    Guards

    >> canActivate
    >> canActivateChild
    >> Fake auth service and canDeactivate
    

    Passing static data to route


    Resolve Guard


    Location startergies useHash: true


    観測量


    Undestanding angular observables


    Custom observables


    Data, Errors, Completion


    Operators, Subject


    フォーム


    Template Driven vs Reactive


    テンプレート駆動


    Creating form


    Accessing form with @ViewChild


    Validation and validation error


    ngModel with two way binding


    Grouping form controls


    Radio buttons


    Resetting forms


    反応方式


    Creating a form


    Syncing HTML…


    View on GitHub