Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从角度2中的另一个组件中选择模板参考变量作为目标_Javascript_Angular - Fatal编程技术网

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中的事件,然后决定何时打开/关闭导航