首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态移除角为9的组件?

如何动态移除角为9的组件?
EN

Stack Overflow用户
提问于 2020-10-02 01:28:52
回答 1查看 1.4K关注 0票数 1

我必须创建一个多选择筛选器,该过滤器将接受要单击的多个选项值,以便细化后端某些get API端点的响应。

每当用户单击某个选项时,就会动态地呈现一个“芯片”组件,以了解用户:“嘿,您只要通过这个和那个筛选器选项过滤结果”。

环顾网络,我发现了这个stackblitz

在这个代码示例中,我了解到在这几行中:

代码语言:javascript
复制
let componentFactory = this.CFR.resolveComponentFactory(ChildComponent);
let childComponentRef = this.VCR.createComponent(componentFactory);

我们在ViewContainerRef中插入给定子组件的实例。找到一个类似于这样的对象:

代码语言:javascript
复制
_data: Object { renderElement: <!--  -->, componentView: undefined, viewContainer: {…}, … }
_elDef: Object { nodeIndex: 4, bindingIndex: 0, outputIndex: 1, … }
_embeddedViews: Array(5) [ {…}, {…}, {…}, … ] //here   
_view: Object { def: {…}, parent: {…}, state: 1036, … }

__embeddedViews对象下,动态生成的视图将被堆叠起来。

稍后,为了决定哪些视图将被删除,这个stackblitz的创建者只需获取组件并创建一个ViewContainerRef.indexOf(component)来获取存储组件的索引,并验证该数组中是否存在动态生成的组件。然后,他/她只需删除调用this.ViewContainerRef.remove(index);的视图

有趣的是,在我的实现中,当我记录我的ViewContainerRef时,我得到了这个对象作为响应:

代码语言:javascript
复制
​_hostTNode: Object { type: 0, index: 23, injectorIndex: 34, … }
_hostView: Array(94) [ ..., {…}, 147, … ]
_lContainer: Array(12) [ <!-- 

芯片是按预期的动态添加的,但是没有_embeddedViews,所以我不能动态地删除它们,因为ViewContainerRef.indexOf(chip)总是返回-1作为“不,我没有一个芯片”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-02 04:17:47

您有这样的不一致性,因为您使用ViewContainerRef API的方式是错误的。

下面是indexOf方法的签名:

代码语言:javascript
复制
abstract indexOf(viewRef: ViewRef): number;

此签名在角度更新期间从未更改。

您所指的stackblitz使用的是Range6Version,它在代码中利用了ViewEngine,但是在您的代码中,您使用的是角9和更高版本,其中使用的是常春藤编译器。

在堆栈闪电战中:

代码语言:javascript
复制
this.VCR.indexOf(componentRef as any);

这意味着您要传递的是ComponentRef实例而不是ViewRef实例。它的工作是偶然的,因为indexOf方法看起来像:

代码语言:javascript
复制
ViewContainerRef_.prototype.indexOf = function (viewRef) {
  return this._embeddedViews.indexOf(viewRef._view);
};

ComponentRef._view === ViewRef._view in ViewEngine.

您应该传递的是ViewRef 实例,而不是:

代码语言:javascript
复制
this.VCR.indexOf(componentRef.hostView)

叉式斯塔克布利茨

该演示程序适用于常春藤(您的特殊情况),但它也将在ViewEngine中工作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64165149

复制
相关文章

相似问题

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