第二次使用 ng2-dragula 进入页面时出错

Posted

技术标签:

【中文标题】第二次使用 ng2-dragula 进入页面时出错【英文标题】:Getting error second time getting to page with ng2-dragula 【发布时间】:2017-05-02 04:34:52 【问题描述】:

我试图阻止用户移动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)

【问题讨论】:

【参考方案1】:

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

ngOnDestroy() 
    this.dragulaService.destroy('nested-bag');

【讨论】:

【参考方案2】:

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

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

Source

【讨论】:

以上是关于第二次使用 ng2-dragula 进入页面时出错的主要内容,如果未能解决你的问题,请参考以下文章

vue生命周期钩子函数如何第二次打开不请求接口

vueweb高德第二次进入页面error

第二次打开 SupportMapFragment 时出错

第二次运行迁移时出错。看来需要处理通用回购,我不知道如何

第二次在对话框中膨胀片段时出错

电子邮件附件的存储名称 - 第一次运行时出错,但在第二次运行时有效