小编Ago*_*ony的帖子

在ngFor中动态添加组件

我有一个"仪表板",可以加载已配置的元素.仪表板模板具有以下内容:

  <div class="dash-container" [ngGrid]="gridConfig">
    <div *ngFor="let box of boxes; let i = index"
       [(ngGridItem)]="box.config"
       (onItemChange)="updateItem(i, $event)"
       (onResize)="onResize(i, $event)"
       (onDrag)="onDrag(i, $event)"
       (onDragStop)="onDragStop(i,$event)"
       [ngClass]="box.class"
     >
      <div class="handle"><h4>{{box.title}}</h4></div>
      <div [innerHTML]= "box.content"></div>
    </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

现在<div [innerHTML]= "box.content"></div>不行,因为非标准元素被消毒了.运行最新的Angular 2.4.6(RC 6).

我看一下我能找到的动态组件的例子 - 但我看到的只是他们只是将组件添加到当前组件 - 但我需要它们在一个非常特定的div中,如上例所示.

ComponentFactoryResolver通常与...一起使用@ViewChild.但我不能在一个循环中这样做:

ngAfterViewInit() {
    const dashWidgetsConf = this.widgetConfigs();
    for (var i = 0; i < dashWidgetsConf.length; i++) {
      const conf = dashWidgetsConf[i];

      @ViewChild(conf.id, {read: ViewContainerRef}) var widgetTarget: ViewContainerRef;

      var widgetComponent = this.componentFactoryResolver.resolveComponentFactory(UnitsComponent);
      widgetTarget.createComponent(widgetComponent);
    }
  }
Run Code Online (Sandbox Code Playgroud)

@viewchild给'装饰者在这里无效'.如何从conf列表中加载组件(在循环中)并将它们添加到组件中的特定div(divs …

angular

17
推荐指数
2
解决办法
9649
查看次数

带有第三方指令的 Angular2 jasmine 单元测试组件

组件是https://github.com/valor-software/ngx-bootstrap 下拉菜单。

在模板中我有这个:

    <span dropdown placement="bottom right">
      <a id="droplist-label" href="javascript:void(0)" dropdownToggle>
          <span>{{conf.title}}</span>
      </a>
      <ul class="dropdown-menu pull-right" *dropdownMenu>
        <li *ngFor="let item of items">
          <a class="dropdown-item" (click)="listClick(item.value)" href="javascript:void(0)">{{item.label}}</a>
        </li>
      </ul>
    </span>
Run Code Online (Sandbox Code Playgroud)

在单击标签之前不会添加 ul - 因此我无法在测试中访问它。

调用点击:

let droplist = fixture.debugElement.query(By.css('#droplist-label')).nativeElement;
droplist.click();
Run Code Online (Sandbox Code Playgroud)

不起作用 - 如果我尝试寻找dropdown-menu它是空的:

it('should test if droplist has title',  async(() => {
    fixture.detectChanges();
    let droplist = fixture.debugElement.query(By.css('#droplist-label')).nativeElement;
    droplist.click();

    fixture.whenStable().then(() => {
        let droplistOptions = fixture.debugElement.queryAll(By.css('.dropdown-item'));
        expect(droplistOptions.length).toBeGreaterThan(0);
    });
}));
Run Code Online (Sandbox Code Playgroud)

该指令似乎有一个用于单击事件的主机侦听器 - 我如何触发它以使 ul 可用?

jasmine karma-jasmine angular

5
推荐指数
2
解决办法
1774
查看次数

CSS flexbox 换行未调整大小以适应内容

显示问题的简化 plunkr: https://plnkr.co/edit/mHTHLEumQ04tInFVAz3z ?p=preview

如果调整右视口的大小直到两个容器不再适合同一行,则右视口将移动到新行。

然而,父级 inline-flex 容器的宽度不会改变,顶部的“header”元素会被抛出——“header”中的“button”应该与下面容器中的最后一个项目右对齐。

两个(或多个)项目具有固定宽度,但它们之间没有空间。这些是唯一具有固定宽度或高度的元素。

当项目换行到新行时,如何强制 Flex 容器宽度适应/收缩(不使用 js,纯 HTML/CSS)?

.main-flex {
  display: -webkit-inline-flex;
  display: inline-flex;
  -webkit-flex-direction: column;
  flex-direction: column;
}

.flex-container {
  flex-grow: 1;
  display: -webkit-inline-flex;
  display: inline-flex;
  -webkit-flex-direction: row;
  flex-direction: row;
  flex-wrap: wrap;
}
Run Code Online (Sandbox Code Playgroud)
<div style="margin-top: 100px;" class="main-flex">
  <div>
    <span>header</span>
    <span style="float:right">button</span>
  </div>
  <div class="flex-container">
    <div style="height: 400px; width:250px; border: 1px solid black;"></div>
    <div style="height: 400px; width:250px; border: 1px solid black;"></div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

html css flexbox

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

angular ×2

css ×1

flexbox ×1

html ×1

jasmine ×1

karma-jasmine ×1