首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除和添加数据表时的角4 ObjectUnsubscribedError错误

删除和添加数据表时的角4 ObjectUnsubscribedError错误
EN

Stack Overflow用户
提问于 2018-04-02 07:28:49
回答 2查看 6.3K关注 0票数 4

我在点击按钮(View_click)时得到了view_click。

对象未订阅错误{名称:"ObjectUnsubscribedError",堆栈:"ObjectUnsubscribedError:对象未订阅的↵“ 一个…(ng:///AppModule/UserComponent.ngfactory.js:43:5)",消息:“对象未订阅”,ngDebugContext: DebugContext_,ngErrorLogger:ƒ}

意见如下:

代码语言:javascript
运行
复制
 <button class="btn" (click)="view_click(e)">Click</button>
            <div class="container-fluid" *ngIf="list_v; ">
                <div class="row">
                    <div class="col-md-12">
                        <div class="card">
                            <div class="header">
                                <h4 class="title">User List</h4>
                                <p class="category">List all users</p>
                            </div>
                            <div class="content table-responsive table-full-width">
                              <table datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" class="row-border hover" (click)="table_click($event.target)"></table>
                            </div>
                        </div>
                    </div>
                </div>
            </div> 

构成部分如下:

代码语言:javascript
运行
复制
import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core';
import { DataTableDirective } from 'angular-datatables';
import { HttpClient } from '@angular/common/http';
import { Subject } from 'rxjs/Subject';

@Component({
  selector: 'app-user',
  templateUrl: 'user.component.html'
})
export class UserComponent implements OnInit, AfterViewInit {
  list_v=true;    

  constructor(private http: HttpClient){ }    

   view_click(e:HTMLElement){
       if(this.list_v){
           this.list_v=false;
       }else{
           this.list_v=true;
       }
   }

  @ViewChild(DataTableDirective)
  dtElement: DataTableDirective;

  dtOptions: DataTables.Settings = {};

  dtTrigger: Subject<any> = new Subject();

  ngOnInit(): void {
    this.dtOptions = {
      ajax: 'http://localhost/angular/backend/users',
      columns: [{
        title: 'ID',
        data: 'id'
      }, {
        title: 'Name',
        data: 'name'
      }, {
        title: 'Action',
        data: 'action'
      }]
    };
  }
  ngOnDestroy() {

}

  ngAfterViewInit(): void {
    this.dtTrigger.next();
  }

   table_click(e:HTMLElement){
    //   if(e.attributes.getNamedItem('delete_id')){
    //          var id=e.attributes.getNamedItem('delete_id').nodeValue;
    //      this.http.get('http://localhost/angular/backend/delete/user/'+id,)
      //     .subscribe(    
      //    (data) => this.delete(data), //For Success Response
      //   err => {console.error(err)} //For Error Response
      // );   
      // }

   }
   delete(data){
           this.rerender();
   }

  rerender(): void {
    this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {
      // Destroy the table first
      dtInstance.destroy();
      // Call the dtTrigger to rerender again
      this.dtTrigger.next();
    });
  }
} 
EN

回答 2

Stack Overflow用户

发布于 2018-04-02 08:03:24

似乎当你做重登时,它会移除所有的侦听器,因为重发是不以角度的方式进行的。因此,在重建器单击监听器后,不知何故,"table_click(e:HTMLElement)“不起作用。因此,您需要检查‘角度数据’回购类似的问题。我不是百分之百肯定,但似乎是这样的。

票数 0
EN

Stack Overflow用户

发布于 2018-04-02 08:06:34

在构成部分中添加:

代码语言:javascript
运行
复制
subscription: any;

GET请求创建订阅

代码语言:javascript
运行
复制
table_click(e:HTMLElement){

    if(e.attributes.getNamedItem('delete_id')){
        var id=e.attributes.getNamedItem('delete_id').nodeValue;
// ------- update subscription -----//
        this.subscription = this.http.get('http://localhost/angular/backend/delete/user/'+id) 
                .subscribe((data) => this.delete(data), //For Success Response
                    err => {console.error(err)} //For Error Response);   
   }
}

然后将其在unsubscribedelete中作为:

代码语言:javascript
运行
复制
delete(data){
    this.subscription.unsubscribe();
    this.rerender();
}

也可以在ngOnDestroy中取消订阅,如:

代码语言:javascript
运行
复制
ngOnDestroy() {
  this.subscription.unsubscribe();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49607072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档