Login 在组件完成布线后将数据传递给组件

Login 在组件完成布线后将数据传递给组件,login,angular,angular2-routing,angular2-forms,angular2-services,Login,Angular,Angular2 Routing,Angular2 Forms,Angular2 Services,我有一个navbar登录(navbar中的登录表单)和一个页面登录(一个带有登录表单的页面,可以路由到)。导航栏登录表单和页面登录表单是通过服务双向绑定的(请参阅下面的第一个代码位) 我想要的是以下流程: 用户在navbar登录中输入电子邮件和密码 单击“提交”按钮时,凭据将发送到login.service 如果凭据错误,服务将路由到显示凭据的登录页面 如果页面登录已经显示,则与服务的双向绑定可以正常工作。但是如果它没有显示,我输入凭据并按下按钮,它只会路由到页面登录,但不会传递凭据。 我使用以

我有一个navbar登录(navbar中的登录表单)和一个页面登录(一个带有登录表单的页面,可以路由到)。导航栏登录表单和页面登录表单是通过服务双向绑定的(请参阅下面的第一个代码位)

我想要的是以下流程:

  • 用户在navbar登录中输入电子邮件和密码
  • 单击“提交”按钮时,凭据将发送到login.service
  • 如果凭据错误,服务将路由到显示凭据的登录页面
  • 如果页面登录已经显示,则与服务的双向绑定可以正常工作。但是如果它没有显示,我输入凭据并按下按钮,它只会路由到页面登录,但不会传递凭据。

    我使用以下服务使navbar登录和页面登录相互通信(跨“不相关”组件的双向绑定):

    导出类loginnav2page服务{
    viewerChange:EventEmitter=neweventemitter();
    构造函数(){}
    emitNavChangeEvent(用户:{email:string,密码:string}){
    this.viewerChange.emit(用户);
    }
    getNavChangeEmitter(){
    返回this.viewerChange;
    }
    }
    
    这是navbar组件,pass2page与HTML输入中的keyup事件挂钩:

    导出类LoginNavbarComponent{
    用户:={电子邮件:'',密码:'};
    构造函数(private _loginNav2pageService:loginNav2pageService,private _loginService:loginService){}
    pass2page(){
    this.\u loginNav2pageService.emitNavChangeEvent(this.user);
    }
    onNavbarLoginBtn(){
    this.\u loginService.onNavbarLogin(this.user);
    }
    }
    
    这是页面登录组件中的侦听器:

    导出类LoginPageComponent实现OnInit{
    用户={电子邮件:,密码:};
    认购:任何;
    构造函数(私有的_loginnav2page服务:loginnav2page服务){}
    ngOnInit():任何{
    this.subscription=this.\u loginNav2pageService.getNavChangeEmitter().subscripte(用户=>this.setViewer(用户));
    }
    setViewer(用户:{email:string,密码:string}){
    this.user=用户;
    }
    }
    
    最后是登录服务:

    导出类登录服务{
    构造函数(私有_路由器:路由器,私有_loginnav2page服务:loginnav2page服务){}
    //从导航栏登录用户
    onNavbarLogin(用户:LoginUserInterface){
    //如果成功,则登录和路由
    如果(user.email==='name'&&user.password==='1234'){
    console.log(“登录成功”);
    //通往月台的路线
    }
    //else路由到登录页面,向用户显示验证错误
    否则{
    这个.u路由器.导航(['Login']);
    此._loginNav2pageService.emitNavChangeEvent(用户);
    console.log(“错误凭证”);
    }
    }
    }
    
    晚上睡了个好觉后,我想出来了:),上面的代码是我以前在其他部分中修改过的一段代码,这段代码非常复杂

    现在,我只是简单地使用ngAfterViewInit生命周期钩子从服务中获取数据


    谢谢

    睡了一个好觉后,我发现了:),上面的代码是我以前在其他部分修改过的一段代码,这段代码非常复杂

    现在,我只是简单地使用ngAfterViewInit生命周期钩子从服务中获取数据


    谢谢

    似乎你做了太多的工作,只有一个共享服务可以做你想做的。甚至很难用给定的数据计算出您想要实现的目标。您需要对共享对象使用单一共享服务。是的……在睡了一个好觉之后,我发现:),上面的代码是我以前在其他部分中修改过的一段代码。。。。现在,我只是简单地使用ngAfterViewInit生命周期钩子从服务中获取数据。谢谢这很好,但正如我所说,这仍然可以优化。祝你好运!似乎你做了太多的工作,只有一个共享服务可以做你想做的。甚至很难用给定的数据计算出您想要实现的目标。您需要对共享对象使用单一共享服务。是的……在睡了一个好觉之后,我发现:),上面的代码是我以前在其他部分中修改过的一段代码。。。。现在,我只是简单地使用ngAfterViewInit生命周期钩子从服务中获取数据。谢谢这很好,但正如我所说,这仍然可以优化。祝你好运!