4

我试图阻止用户移动第一个元素dragulaService,代码第一次工作没有任何错误,但是当我离开这个页面然后再次打开它时,我得到了错误。

导致错误的代码:

constructor(public service:SmartTablesService, private dragulaService:DragulaService) {
    dragulaService.setOptions('nested-bag', {
      revertOnSpill: true,
      moves: function (el:any, container:any, handle:any):any {
        if (handle.className === 'sorting-table-title') {
          return false;
        } else {
          return true;
        }

      }
    });

错误是:

error_handler.js:48 例外:未捕获(承诺中):错误:./SortTableComponent 类 SortTableComponent_Host 中的错误 - 内联模板:0:0 由以下原因引起:包名为:“nested-bag”已存在。错误:包名为:“nested-bag”已经存在。在 DragulaService.add ( http://platform.local:8080/3.chunk.js:1070:19 ) 在 DragulaService.setOptions ( http://platform.local:8080/3.chunk.js:1099:24 )在新的 SortTableComponent ( http://platform.local:8080/3.chunk.js:1311:24 )

4

2 回答 2

11

您需要手动销毁组件nested-bagonDestroy生命周期,因为它不会自动完成:

ngOnDestroy() {
    this.dragulaService.destroy('nested-bag');
}
于 2016-12-16T11:58:01.113 回答
0

最好为DragulaService使用拖放的每个 Angular 组件提供唯一的,而不是共享公共服务:

@Component({
   ...,
   providers: [DragulaService],
   ...
})
export class MyComponent {
...
}

资源

于 2021-07-02T08:49:52.310 回答