Как создавать, редактировать и удалять данные в смарт-таблице Ng2 - PullRequest
0 голосов
/ 13 октября 2019

Я использовал [умную таблицу ng2] в своем проекте angular 2, мне нужно отправить запрос API с помощью метода http.post (), но проблема возникла, когда я нажал на кнопку, чтобы подтвердить данные, сталкивающиеся с этой ошибкой в ​​консоли:

ОШИБКА TypeError: _co.addClient не является функцией.

это код в service.ts :

import { Injectable } from '@angular/core';
import { Clients } from './clients.model';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Observable} from 'rxjs';
@Injectable({
  providedIn: 'root'
})
export class ClientsService {

  url="http://localhost:21063/api/clints"
  clients:Clients[];
  client:Clients;

  constructor(private http:HttpClient) { }
getAllClients(): Observable<Clients[]>{
    return this.http.get<Clients[]>(this.url);

}
addClient(event){
this.http.post<Clients>(this.url,this.client)
.subscribe(
  res=>{
    console.log(res);

    event.confirm.resolve(event.Clients);
  },
  (err: HttpErrorResponse) => {
    if (err.error instanceof Error) {
      console.log("Client-side error occurred.");
    } else {
      console.log("Server-side error occurred.");
    }
  }
)
}

и это мой шаблон :

        <div class="mainTbl">

            <ng2-smart-table 
            [settings]="settMain" 
            [source]="this.Service.clients"
            (createConfirm)="addClient($event)"
            (editConfirm)="onEditConfirm($event)"
            (deleteConfirm)="onDeleteConfirm($event)"
            ></ng2-smart-table>

        </div>

componenttent .ts

settMain = {
    noDataMessage: 'عفوا لا توجد بيانات',

    actions: {
      columnTitle: 'إجراءات',
      position: 'right',
    },
    pager: {
      perPage: 5,
    },
    add: {
      addButtonContent: '  إضافة جديد ',
      createButtonContent: '',
      cancelButtonContent: '',
      confirmCreate: true,
    },
    edit: {
      editButtonContent: '',
      saveButtonContent: '',
      cancelButtonContent: '',
      confirmSave: true,


    },
    delete: {
      deleteButtonContent: '',
      confirmDelete: true,
    },

    columns: {
      id: {
        title: 'كود العميل',
        width: '80px',
      },
      name: {
        title: 'اسم العميل',
        width: '160px'
      },
      phone: {
        title: ' الهاتف'
      },
      address: {
        title: ' العنوان'
      },
      account: {
        title: 'الرصيد '
      },
      notes: {
        title: 'ملاحظات'
      }
    }
  };


  private myForm: FormGroup;

  constructor(private formBuilder: FormBuilder, private Service: ClientsService) { }

  ngOnInit() {

    this.Service.getAllClients().subscribe(data => this.Service.clients = data);
    this.Service.client={
      id:0,
      name:null,
      phone:null,
      address:null,
      type:null,
      account:0,
      nots:null,
      branchId:0,
    };


так, как я могу найти свою ошибку и что лучшеспособ обрабатывать операции создания, редактирования и удаления? заранее спасибо

1 Ответ

0 голосов
/ 13 октября 2019

Это потому, что addClient - это метод в service.ts, тогда как ng2-smart-table создается в этом компоненте, и вам не следует напрямую вызывать свой метод службы в шаблоне.

Поэтому правильным способом было бы создать метод в вашем component.ts, который вызывает метод addClient.

В вашем шаблоне component.html мы связываем editConfirm событие в другой метод onAddClient

<div class="mainTbl">
  <ng2-smart-table 
    [settings]="settMain" 
    [source]="this.Service.clients"
    (createConfirm)="onAddClient($event)"
    (editConfirm)="onEditConfirm($event)"
    (deleteConfirm)="onDeleteConfirm($event)"
  ></ng2-smart-table>
</div>

В ваших component.ts,

onAddClient(event) {
  this.Service.addClient(event).subscribe(
    (res) => {
      // handle success
    }, (error) => {
     // handle error
    });

}

И, кроме того, на ваш service.ts вы будете передавать данные изcompnoent и вернуть ответ от http-запроса от HTTP-клиента.

addClient(data){
  console.log(data);
  return this.http.post<Clients>(this.url, data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...