【问题标题】:How to append child component into parent component conditionally?如何有条件地将子组件附加到父组件中?
【发布时间】:2017-11-14 22:52:25
【问题描述】:

我有两个组件,父组件和注册组件。

ParentComponent.html 看起来像:

<div class="tab-content">
    <div class="tab-pane" id="signup" (click)="getChild()">
        <register></register>  --//register component
    </div>
 </div>

register.component.ts 看起来像:

import { Component, OnInit } from '@angular/core';

@Component({
    selector: 'register',
    templateUrl: '../templates/register.html'
})
export class RegisterComponent implements OnInit { 
   ngOnInit() {
       this.registerService.getRoleList()
        .subscribe(res => {
            if(res.data){
                this.instRoleList = res.data.roleList;
            }
        });

     /* ngOnInit calls a service from which data is received and certain 
        conditions are met. I want this service to go only when getDetails() is called and <register> should get append to <div id="signup>

*/
   }
}

register.html 代码 sn-p 看起来像:(它取决于从注册服务数据“”接收到的数据)

<div class="form-group group" *ngIf="instRoleList">
 </div>

所以,我希望在单击 getChild() 时,将注册组件附加到 &lt;div id="signup"&gt;

如何做到这一点?

<div class="tab-pane" id="signup" (click)="getChild()">
          <!-- register component to append here on getChild() click -->
</div>

我已经用过下面的代码,但是没有用。

$('#signup').append('<register></register>')

【问题讨论】:

  • *ngIf 听起来像你要找的东西。
  • 一个简单的布尔标志可能会做吗?类似:&lt;register *ngIf="some condition"&gt;&lt;/register&gt;
  • 如果你想使用 Angular -_- 就停止思考 jQuery!
  • 您甚至可以使用&lt;router-outlet&gt;&lt;/router-outlet&gt; 和更多代码进行路由
  • 但我也不希望调用 register.component.ts 中的 ngOnInit() 中的服务

标签: jquery angular angular2-template angular2-directives


【解决方案1】:

这可以很容易地用 ngIf 指令归档:

<div class="tab-content">
         <div class="tab-pane active" id="signin">
            <!-- other code -->
        </div>
        <div class="tab-pane" id="signup" (click)="getChild()">
            <register *ngIf="condition"></register>  --//register component
        </div>
     </div>

@Component({
    selector: 'register',
    templateUrl: '../templates/register.html'
})
export class ParentComponent { 
   condition: boolean = false;
   getChild(){
      this.condition = !this.condition;
   }
}

此点击事件将作为这种方法的切换功能。

【讨论】:

  • Register 组件包含对 ngOnInit() 的服务调用,如果它的放置如下所示,那么该调用将继续。
    --//注册组件
    我想要那个如果我单击 getDetails(),则注册组件应附加该 div,然后该服务调用才应该执行。
  • 然后重新表述你的问题,你不要在其中谈论任何“getDetails”;)
  • 问题。已编辑。请看一下
猜你喜欢
  • 1970-01-01
  • 2018-03-08
  • 2021-08-15
  • 1970-01-01
  • 2019-09-08
  • 2018-07-23
  • 2019-12-01
  • 2017-05-21
  • 2020-09-03
相关资源
最近更新 更多