2017-06-06 6 views
3

私は(グリッド)コンポーネントを何度も使用しています。問題はそれが大規模であり、〜70%が動的に生成される可能性があると思いますが、解決する方法はたくさんありますが、どれがベストですか?angle 4 reduce HTMLコンテンツ

htmlファイル:

<div class="items containerX" fxLayout="column" fxFlexFill> 

    <!--Operations--> 
    <div class="operations"> 
     <div class="mobile-operations" fxShow.xs="true" fxHide.gt-xs="true"> 
      <div fxLayout="row" fxFlex> 
       <div fxFlex="90" class="buttons"> 
        <button type="button" class="adminButton" (click)="onAdd();"> 
         <span class="fa fa-plus"></span> Add 
        </button> 

        <button type="button" class="adminButton" (click)="onDelete();" [disabled]='!hasSelectedSong'> 
         <span class="fa fa-times"></span> Remove 
        </button> 

        <button type="button" class="adminButton" (click)="onEdit();" [disabled]='!hasSelectedSong'> 
         <span class="fa fa-edit"></span> Edit 
        </button> 
       </div> 

       <div fxFlex="10" class="buttons" (click)="searchToggle = !searchToggle;" > 
        <span class="fa fa-search fa-lg searchButton"></span> 
       </div> 
      </div> 

      <div class="searchbar" *ngIf="searchToggle" fxFlex fxHide.gt-xs="true"> 
       <form [formGroup]="simpleForm" fxFlex> 
        <input class="searchfield" type="text" placeholder="..." formControlName="simple" fxFlex> 
       </form> 
      </div> 
     </div> 

     <div class="operations" fxLayout="row" fxHide.lt-sm="true"> 
      <div fxFlex class="buttons"> 
       <button type="button" class="adminButton" (click)="onAdd();"> 
        <span class="fa fa-plus"></span> <span fxHide.lt-md="true"> Add</span> 
       </button> 

       <button type="button" class="adminButton" (click)="onDelete();" [disabled]='!hasSelectedSong'> 
        <span class="fa fa-times"></span> <span fxHide.lt-md="true"> Remove</span> 
       </button> 

       <button type="button" class="adminButton" (click)="onEdit();" [disabled]='!hasSelectedSong'> 
        <span class="fa fa-edit"></span> <span fxHide.lt-md="true"> Edit</span> 
       </button> 
      </div> 

      <div fxFlex class="buttons"> 
       <button type="button" class="adminButton" (click)="paginator.first()"> 
        <span class="fa fa-caret-left"></span> 
        <span class="fa fa-caret-left"></span>     
        <span fxHide.lt-md="true">First</span> 
       </button> 

       <button type="button" class="adminButton" (click)="paginator.prev()"> 
        <span class="fa fa-caret-left"></span> 
        <span fxHide.lt-md="true">Prev</span> 
       </button> 

       <span class="page-number">{{paginator.page}}</span> 

       <button type="button" class="adminButton" (click)="paginator.next()"> 
        <span fxHide.lt-md="true">Next</span> 
        <span class="fa fa-caret-right"></span> 
       </button> 

       <button type="button" class="adminButton" (click)="paginator.last()"> 
        <span fxHide.lt-md="true">Last</span> 
        <span class="fa fa-caret-right"></span> 
        <span class="fa fa-caret-right"></span>     
       </button> 
      </div> 

      <div fxFlex class="buttons"> 
       <form [formGroup]="simpleForm"> 
        <input class="globalSearch" type="text" placeholder="..." formControlName="simple"> 

        <button type="button" (click)="onSearch();" class="searchButton"> 
         <span class="fa fa-search"></span> 
        </button> 
       </form> 
      </div> 
     </div> 
    </div> 

    <div class="itemView"> 
     <!--Header--> 
     <div class="header" fxLayout="row" [ngClass.xs]="{'search-open' : searchToggle, 'mobile-header' : true}"> 
      <div fxFlex="100px" fxFlex.lt-sm="75px"> 
       <span class="fa fa-hashtag" aria-hidden="true" (click)="paginator.reset()"></span> 
      </div> 

      <div fxFlex> 
       <div fxFlex="75px" fxHide.lt-sm="true" [ngClass]="{'sortBy' : sort == 'code'}"> 
        <span class="item" (click)="onSortBy('code');"> 
         Type <span *ngIf="sort == 'code'" class="fa" [ngClass]="getDirection('code')"></span> 
        </span> 
       </div> 

       <div fxFlex [ngClass]="{'sortBy' : sort == 'artist'}"> 
        <span class="item" (click)="onSortBy('artist');"> 
         Level <span *ngIf="sort == 'artist'" class="fa" [ngClass]="getDirection('artist')"></span> 
        </span> 
       </div> 

       <div fxFlex [ngClass]="{'sortBy' : sort == 'title'}"> 
        <span class="item" (click)="onSortBy('title');"> 
         Stat <span *ngIf="sort == 'title'" class="fa" [ngClass]="getDirection('title')"></span> 
        </span> 
       </div> 

       <div class="listLast" fxFlex="30px" fxHide.lt-sm="true"></div> 
      </form> 
     </div> 

     <!--items--> 
     <div class="items dd-list"> 
      <div class="item" fxLayout="row" *ngFor="let item of items; let i = index;" [ngClass.xs]="{'search-open' : searchToggle}"> 
       <div class="listFirst" scope="row" fxFlex="100px" fxFlex.lt-sm="75px"> 
        <span fxFlex="25px" class="form-check-label adminCheckbox tools" (click)="selectItem(item._id);"> 
         <i class="fa" aria-hidden="true" [ngClass]="{'fa-check-square': isSelected(item._id), 'fa-square': !isSelected(item._id)}"></i> 
        </span> 

        <span class="index" fxFlex>{{(i+1*paginator.page)}}</span> 

        <span class="tools" fxFlex="25px"> 
         <a fxHide.lt-sm="true" (click)="onEdit(item._id)" class="fa fa-edit" aria-hidden="true"></a> 
        </span> 
       </div> 

       <div fxFlex> 
        <div class="listMiddle" fxFlex="75px" fxHide.lt-sm="true">{{item.type}}</div> 
        <div class="listMiddle artist" fxFlex title={{item.level}}>{{item.level}}</div> 
        <div class="listMiddle title" fxFlex title={{item.stats}}>{{item.stats | json}}</div> 
       </div> 

       <div class="tools listLast" fxFlex="30px" fxHide.lt-sm="true"> 
        <a fxHide.lt-sm="true" (click)="onDelete(item._id);" class="fa fa-times " aria-hidden="true"></a> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

<!--Popups--> 
<popup name="removeItemAlert" type="alert"> 
    <div popup-body> 
     Are you sure? 
    </div> 
</popup> 

あなたは、私が唯一の列名、検索入力名、アイテムのフィールドとDOM要素の属性(クラス、fxFlex)を変更する必要が見ることができるように - 応答します。コンテンツを圧縮するためのベストプラクティス(分割されたコンポーネント、テンプレート、ディレクティブ)は何ですか?

(アイテムオブジェクトの番号フィールドが異なります)。

追加情報:

基本的な方法ItemsComponentに実装され、私はそれらを上書きすることができ、この方法が必要とされます。

import { Component, OnInit, OnDestroy } from '@angular/core'; 
import { Router } from '@angular/router'; 
import { 
FormGroup, 
FormControl, 
Validators, 
FormBuilder, 
FormArray 
} from "@angular/forms"; 

import { 
    StorageService, 
    SystemService, 
    RequestService, 
    PopupService, 
    PaginatorService 
} from '../_shared'; 

import { 
    ItemsComponent 
} from '../_generals'; 

@Component({ 
selector: 'app-basic-characters', 
templateUrl: './basic-characters.component.html', 
styleUrls: ['./basic-characters.component.scss'], 
providers: [PaginatorService] 
}) 
export class BasicCharactersComponent extends ItemsComponent implements OnInit { 
    public item: string = "basicCharacters"; 
    public class: string = 'BasicCharactersComponent'; 

    constructor( 
     router: Router, 

     paginator: PaginatorService, 
     popup: PopupService, 
     storage: StorageService, 
     request: RequestService 
    ) { 
     super(router, paginator, popup, storage, request); 
    } 

    public ngOnInit() { 
     super.ngOnInit(); 

     // console.log('child init'); 
    } 

    public newSearchForm(){ 
     return new FormGroup({ 
      'type': new FormControl(''), 
      'level': new FormControl(''), 
      'stats': new FormControl(''), 
     }); 
    } 

    public newSimpleForm(){ 
     return new FormGroup({ 
      'simple': new FormControl('') 
     }); 
    } 
} 
+2

これをコンポーネントにして、これらの変数のすべてを単に入力という名前にします。 – Ken

+0

私は関数の参照を失うことはありませんか?例:onAdd()、onDelete()? – Twois

+0

これらはすべてコンポーネントで定義する必要があります。 – Ken

答えて

3

このセクションのコードは2回出現しました。前述の@kenのように、コンポーネント(たとえば、button-groupという名前)がある場合、コンポーネント内でさまざまな関数を定義することによって、このコンポーネントを再利用できます。

 <div fxFlex="90" class="buttons"> 
      <button type="button" class="adminButton" (click)="onAdd();"> 
       <span class="fa fa-plus"></span> Add 
      </button> 

      <button type="button" class="adminButton" (click)="onDelete();" [disabled]='!hasSelectedSong'> 
       <span class="fa fa-times"></span> Remove 
      </button> 

      <button type="button" class="adminButton" (click)="onEdit();" [disabled]='!hasSelectedSong'> 
       <span class="fa fa-edit"></span> Edit 
      </button> 
      </div> 
関連する問題