Javascript Angular 2/Typescript在单击按钮时删除对象

Javascript Angular 2/Typescript在单击按钮时删除对象,javascript,angular,typescript,angular2-directives,Javascript,Angular,Typescript,Angular2 Directives,我有一个使用Typescript的Angular 2应用程序,但我是新手,我有一个带有“删除”按钮的表格 我可以将对象数据传递给我的确认模式,但当我“确认”它时,它仍在我的表中 删除模态组件 import { Component, OnInit, Inject, Input } from '@angular/core'; import { TestService } from '../../ABC/TestService/TestService.service'; import { MdDial

我有一个使用
Typescript
Angular 2
应用程序,但我是新手,我有一个带有“删除”按钮的表格

我可以将对象数据传递给我的确认模式,但当我“确认”它时,它仍在我的表中

删除模态组件

import { Component, OnInit, Inject, Input } from '@angular/core';
import { TestService } from '../../ABC/TestService/TestService.service';
import { MdDialog, MdDialogRef, MD_DIALOG_DATA } from '@angular/material';

import { testModal } from 'models/test';

@Component({
    selector: 'app-test',
    templateUrl: './test.component.html',
    styleUrls: ['./test.css']
})

export class testDeleteModalComponent implements OnInit {
    @Input('test') test: testModal;

    constructor(private TestService: TestService, private accountService: AccountService,
        @Inject(MD_DIALOG_DATA) private dialogData: any) { }

    ngOnInit() {
        console.log('test', this.dialogData.beneficiary);
        this.test = this.dialogData.test;
    }

    deleteTest() {

        if (this.dialogData.test.identifier) {
            // this.dialogData.beneficiary.splice(this.dialogData.beneficiary.indexOf(this.beneficiaryAnt), 1);
            // this.dialogData.beneficiary.splice(this.beneficiary);
            // delete this.beneficiary;
            this.dialogData.test.splice(this.dialogData.test.indexOf(this.dialogData.test), 1);
        } else {
            this.dialogData.test.operation = 'X';
        }
    }
}
HTML

<button md-icon-button (click)="deleteTest()" name="deleteTestDetails">
    <md-icon>delete forever</md-icon>
</button>
当用户单击确认按钮时,将调用“deleteTest”方法

我在
IF
中也介绍了我在上面尝试过的一些方法,但它们总是会回来

。。。这不是一个函数


单击按钮删除数据对象并在完成后立即刷新的最简单方法:

您的父html必须这样调用子html:

<app-component [inputData]="dataTable" (inputDataChange)="resetData()"/>
然后在子html中留下您的代码(您可以使用这些更改)

删除
最后,在您的子ts文件中,为每个更改设置数据对象,并实现您的输入功能

myDataTable: any = [];
@Input set inputData(data: DataTable) {
   if(data) {
     this.myDataTable = data;
}}

@Output() inputDataChange: EventEmitter<any> = new EventEmitter();

deleteTest() {
   this.inputDataChange.emit(true); 
}
myDataTable:any=[];
@输入集inputData(数据:DataTable){
如果(数据){
this.myDataTable=数据;
}}
@Output()inputDataChange:EventEmitter=新的EventEmitter();
删除测试(){
this.inputDataChange.emit(true);
}
这个代码是做什么的? 当单击delete按钮时,它将向父级发出和事件,然后您的父级将删除dataTable,最后,您的子级输入将刷新它,因为setter将捕获更改并刷新变量


如果要将这些规则应用于表更改,只需发出数据表并重新分配它,而不是重置它。

单击按钮删除数据对象并在完成后立即刷新的最简单方法:

您的父html必须这样调用子html:

<app-component [inputData]="dataTable" (inputDataChange)="resetData()"/>
然后在子html中留下您的代码(您可以使用这些更改)

删除
最后,在您的子ts文件中,为每个更改设置数据对象,并实现您的输入功能

myDataTable: any = [];
@Input set inputData(data: DataTable) {
   if(data) {
     this.myDataTable = data;
}}

@Output() inputDataChange: EventEmitter<any> = new EventEmitter();

deleteTest() {
   this.inputDataChange.emit(true); 
}
myDataTable:any=[];
@输入集inputData(数据:DataTable){
如果(数据){
this.myDataTable=数据;
}}
@Output()inputDataChange:EventEmitter=新的EventEmitter();
删除测试(){
this.inputDataChange.emit(true);
}
这个代码是做什么的? 当单击delete按钮时,它将向父级发出和事件,然后您的父级将删除dataTable,最后,您的子级输入将刷新它,因为setter将捕获更改并刷新变量


如果您想将这些规则应用于表更改,那么只需发出您的数据表并重新分配它,而不是重置它。

您提出这个问题很好,我的三个人项目也在努力解决这个问题。我们发现有两种方法。我将展示两种执行typescriptdelete的方法

解决方案a。 因为它是对象,所以需要标识符。首先是

var objectdelete = {
    identifier: 'Mydelte',
    value: '168%'
}
接下来我们需要的是服务。有些人称之为指令,但根据我的经验,它们是一样的。我们已发出警报,以便用户知道若他们并没有设置标识符,那个么他们必须返回。我看不到你们这边的服务,我看到阵列被删除了。如果你将阵列和服务结合起来,这将在整个网站上起作用

export class DeleteService

delete(objectToDelete: string) {

    if (!objectToDelete.identifier) {
       alert('No identifer');
    }else {
        // Delete from your array here.
    }
}
解决方案2

如果上述内容不能满足您的需要,我们的tema还尝试了typescript中的接口。你可以在这里看到它们

所以它变成了

export class myDeleteService {
    deleter: IDeleter
}

export interface IDeleter {
    delete: this.delete.delete(deletE);
    deleteArray: this.array =[];
}
然后简单地在你的html中

<button (click)='delete(dieleter)'>Delete me!</button>
删除我!

这些都是angular2/4/5常见的打字脚本行为,所以我们希望在有更多时间使用它们时能够更加习惯它们

你问这个问题很好,我的三个人项目也在为这个问题而挣扎。我们发现有两种方法。我将展示两种执行typescriptdelete的方法

解决方案a。 因为它是对象,所以需要标识符。首先是

var objectdelete = {
    identifier: 'Mydelte',
    value: '168%'
}
接下来我们需要的是服务。有些人称之为指令,但根据我的经验,它们是一样的。我们已发出警报,以便用户知道若他们并没有设置标识符,那个么他们必须返回。我看不到你们这边的服务,我看到阵列被删除了。如果你将阵列和服务结合起来,这将在整个网站上起作用

export class DeleteService

delete(objectToDelete: string) {

    if (!objectToDelete.identifier) {
       alert('No identifer');
    }else {
        // Delete from your array here.
    }
}
解决方案2

如果上述内容不能满足您的需要,我们的tema还尝试了typescript中的接口。你可以在这里看到它们

所以它变成了

export class myDeleteService {
    deleter: IDeleter
}

export interface IDeleter {
    delete: this.delete.delete(deletE);
    deleteArray: this.array =[];
}
然后简单地在你的html中

<button (click)='delete(dieleter)'>Delete me!</button>
删除我!

这些都是angular2/4/5常见的打字脚本行为,所以我们希望在有更多时间使用它们时能够更加习惯它们

我正在与一个项目,我们的团队为此奋斗了一段时间

我要说的第一件事是,Angular并没有使这成为一项容易的任务,因此我们将尝试忽略框架,而编写纯Java,以使我们的生活更加轻松

因此,看看你的按钮,我可以看到你已经开始在正确的轨道上

如果按钮正在调用组件,如下所示

Html/Java

<button ng-click="delete()">Click me<button>
组件2.ts

function delete = deleteMethod(testIdentifier) {
    var abc = this.beneficiary.beneficiaryIdentifier.test.splice(this.beneficiary.beneficiaryIdentifier.test.indexOf(testIdentifier));
    component2.deleteFunction();
}
然后,我们可以将标识符传递到父组件或子组件中,并删除受益人,如下所示:

deleteMethod(deetle) {
    this.beneficiary.removeAtIndex(testIdentifier.splice(1), 1);
}

回顾起来很容易,但我们三人小组花了很长时间才找到答案。

我与一个项目合作,我们的团队为此奋斗了一段时间

我要说的第一件事是,Angular并没有使这成为一项容易的任务,因此我们将尝试忽略框架,而编写纯Java,以使我们的生活更加轻松

因此,看看你的按钮,我可以看到你已经开始在正确的轨道上

如果按钮正在调用组件,如下所示

Html/Java

<button ng-click="delete()">Click me<button>
组件2.ts

function delete = deleteMethod(testIdentifier) {
    var abc = this.beneficiary.beneficiaryIdentifier.test.splice(this.beneficiary.beneficiaryIdentifier.test.indexOf(testIdentifier));
    component2.deleteFunction();
}
然后,我们可以将标识符传递到父组件或子组件中,并删除受益人,如下所示:

deleteMethod(deetle) {
    this.beneficiary.removeAtIndex(testIdentifier.splice(1), 1);
}
回首往事很容易,但我们的三人小组花了很长时间才找到答案