Javascript 从角度2中的另一个组件中选择模板参考变量作为目标
是否有方法将模板引用变量定位到另一个组件中?Javascript 从角度2中的另一个组件中选择模板参考变量作为目标,javascript,angular,Javascript,Angular,是否有方法将模板引用变量定位到另一个组件中? 我想通过创建一个事件来触发侧导航,该事件通过TRVsidenav调用sidenav的open函数 app.component.html 启动侧导航。 接近 topbar.component.html 菜单 家 试验 签到 顶栏.component.ts 从'@angular/core'导入{Component,OnInit,Output,EventEmitter}; @组成部分({ 选择器:'顶栏', templateUrl:'./topb
我想通过创建一个事件来触发侧导航,该事件通过TRV
sidenav
调用sidenav的open函数
app.component.html
启动侧导航。
接近
topbar.component.html
菜单
家
试验
签到
顶栏.component.ts
从'@angular/core'导入{Component,OnInit,Output,EventEmitter};
@组成部分({
选择器:'顶栏',
templateUrl:'./topbar.component.html',
样式URL:['./topbar.component.css']
})
导出类TopbarComponent实现OnInit{
构造函数(){}
@Output()openNav=neweventemitter();
openSideNav(){
log(this.openNav.emit());
this.openNav.emit();
}
恩戈尼尼特(){
}
}
是否可以从topbar指令将应用程序组件中的模板变量作为目标?我看到了几个选项 首先,您可以创建一个包含sidenav实例的服务。您可以从应用程序组件设置sidenav
class SidenavService {
private _sidenav: MdSidenav;
set sidenav(nav: MdSidenav) {
this._sidenav = nav;
}
open() {
if (this._sidenav) this.sidenav.open();
}
close() {
if (this._sidenav) this._sidenav.close();
}
}
在你的应用程序控制器中
class AppComponent implements AfterViewInit {
@ViewChild(MdSidenav) sidenav: MdSidenav;
constructor(private sidenavService: SidenavService) {}
ngAfterViewInit() {
this.sidenavService.sidenav = this.sidenav;
}
}
然后,您可以将SidenavService
注入您想要访问它的任何其他组件中
另一个选项是简单地将sidenav作为顶栏的输入
<topbar [sidenav]="sidenav"></topbar>
class TopbarComponent {
@Input() sidenav: MdSidenav;
}
类TopbarComponent{
@Input()sidenav:MdSidenav;
}
我个人不喜欢第二种选择,因为我不喜欢不必要地暴露sidenav。我宁愿使用这项服务并控制其他人可以使用它做什么。我看到了一些选项 首先,您可以创建一个包含sidenav实例的服务。您可以从应用程序组件设置sidenav
class SidenavService {
private _sidenav: MdSidenav;
set sidenav(nav: MdSidenav) {
this._sidenav = nav;
}
open() {
if (this._sidenav) this.sidenav.open();
}
close() {
if (this._sidenav) this._sidenav.close();
}
}
在你的应用程序控制器中
class AppComponent implements AfterViewInit {
@ViewChild(MdSidenav) sidenav: MdSidenav;
constructor(private sidenavService: SidenavService) {}
ngAfterViewInit() {
this.sidenavService.sidenav = this.sidenav;
}
}
然后,您可以将SidenavService
注入您想要访问它的任何其他组件中
另一个选项是简单地将sidenav作为顶栏的输入
<topbar [sidenav]="sidenav"></topbar>
class TopbarComponent {
@Input() sidenav: MdSidenav;
}
类TopbarComponent{
@Input()sidenav:MdSidenav;
}
我个人不喜欢第二种选择,因为我不喜欢不必要地暴露sidenav。我宁愿使用该服务并控制其他人可以使用它做什么。我认为这是不可能的,但您可以将其绑定到topbar中的事件,然后决定何时打开/关闭导航。我不认为这是可能的,但您可以将其绑定到topbar中的事件,然后决定何时打开/关闭导航