【问题标题】:binding childcomponent variable with dropdown in parent component Angular 4将子组件变量与父组件Angular 4中的下拉列表绑定
【发布时间】:2018-07-25 20:51:04
【问题描述】:

我是 Angular 4 的新手,使用 MEAN 堆栈开发应用程序。 我的父组件是管理员,子组件是会话。我正在尝试根据子组件值在父组件中设置下拉值。我在插入会话方法中输出相同的发射器事件。但是我无法设置下拉列表的值。请帮忙。

管理html

    <div>
        <label for="FormType" class="col-sm-2 col-form-label">Select Type </label>
         <select #s (change)="setNav(s.value)">
        <option *ngFor="let item of dms" >{{item}}</option>
        </select>
    </div>
    <div *ngIf="regTypeSelectedOption==='Session'">
    <code for session></div>

    <div *ngIf="regTypeSelectedOption==='webinar'">
    <code for webinar>
    </div>
<div (notify)='onNotify($event)'></div

admin.ts

onNotify(message: string):void{
    this.setNav(message);
    alert(JSON.stringify(message));
    }
setNav(nav:any){  
        this.selectedNav = nav;
            if(this.selectedNav == "Session"){
              this.regTypeSelectedOption = "Session";}
            else if(this.selectedNav == "Webinar"){
                  this.regTypeSelectedOption = "Webinar";
            }
            else if (this.selectedNav == "Select"){
                  this.regTypeSelectedOption = "Select";
            }
}

session.ts

export class SessionComponent implements OnInit {
insertSession(sessionForm){
  this.newSession.deliveryMethod = this.regTypeSelectedOption;
  this.newSession.formType = "Session";
  let updatedresult;
  if(this.updatedid == undefined){
    this.dataService.insertNewSession(this.newSession)
    .subscribe(
         res =>{ this.sessions = res;
          console.log('response', res)},
         err => this.apiError = err,
         () => {
            this.notify.emit('Session');
            this.router.navigate(['/admin']);
          }
      )

我在带有 div 的父级中使用通知事件。如果我将通知事件与 sessioncomponent 的选择器一起使用,则会显示整个会话组件

【问题讨论】:

  • this.notify的定义在哪里?我的意思是你在哪里声明它,你在哪里订阅它?
  • @Output() 通知:EventEmitter = new EventEmitter();
  • 我在 session.ts 中添加了这个。但是,这里在代码中漏掉了
  • 您在 insertNewSession observable 的“finally”中添加了 this.notify.emit。是否正确调用?你可以在那里添加一些日志记录吗?

标签: html css angular mean-stack


【解决方案1】:

我认为您想将消息从一个组件发送到另一个组件,而不使用父组件中的子组件。

我查看了您的代码,发现您在选择后导航到“/admin”。

我宁愿建议你在你的 app.routing.ts 中注册一个路由,如下所示

{path:'/admin/:id',component:AdminComponent}

Admincomponent 中使用以下代码从路由中获取数据。

 import {Router, NavigationEnd, ActivatedRoute,Params } from "@angular/router";

Admincomponent 中实现 OnInit 并添加以下代码以读取路由值

ngOnInit(){

    this.activatedRoute.params.subscribe((params: Params) => {

        this.params = this.activatedRoute.params;
        this.regTypeSelectedOption= this.params.value.id != undefined ? this.params.value.id : "";

    });

}

现在在 ChildComponent 中,替换以下代码:

 //this.notify.emit('Session');
        this.router.navigate(['/admin/Session']);

现在,当会话被插入时,它会将您路由回带有会话 ID 的 AdminComponent

【讨论】:

  • 嘿,谢谢..基于此,我被重定向到正确的 UI(会话代码)。但是下拉索引没有更改为 Session。
  • 我的下拉菜单有以下代码 dms =['Select','Session','Webinar'];
猜你喜欢
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
相关资源
最近更新 更多