Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Angular 使用多个模板定义路由元素_Angular_Url Routing_Angular Template - Fatal编程技术网

Angular 使用多个模板定义路由元素

Angular 使用多个模板定义路由元素,angular,url-routing,angular-template,Angular,Url Routing,Angular Template,我正在尝试创建一个具有多个模板入口点的路由组件,我不知道这在Angular中是否可行。我会详细说明一下 在Angular中,我们可以创建包含TemplateRef的嵌套元素,以将子组件的某些部分注入父组件(例如,下图中的子组件的菜单) 主要问题是,我不知道如何使用路由组件实现这一点。我希望父组件上的导航在ng内容上进行导航(现在将是),但也基于我在子组件中定义的某个模板更新菜单。这可能吗?如何启动?是的,如果您通过使用父组件中的选择器来使用子组件,则可以轻松地启动。但是,由于您使用的是路由组件

我正在尝试创建一个具有多个模板入口点的路由组件,我不知道这在Angular中是否可行。我会详细说明一下

在Angular中,我们可以创建包含TemplateRef的嵌套元素,以将子组件的某些部分注入父组件(例如,下图中的子组件的
菜单)


主要问题是,我不知道如何使用路由组件实现这一点。我希望父组件上的导航在ng内容上进行导航(现在将是
),但也基于我在子组件中定义的某个模板更新菜单。这可能吗?如何启动?

是的,如果您通过使用父组件中的选择器来使用子组件,则可以轻松地启动。但是,由于您使用的是路由组件,并且正在使用
渲染子组件

您需要将数据从子组件传递到父组件。 为此,您可以使用服务在子组件中决定数据的部分中,在父组件中呈现数据

为此,您可以创建一个服务,假设data.service.ts

@Injectable({
  providedIn: 'root'
})
export class DatService {
  dataToRendered$: BehaviorSubject<boolean> = new BehaviorSubject(false);
  constructor(){}
  setDataToRender(data:any){
   this.dataToRender.next(data);
  }
}
在子组件中,您只需调用方法setdatastorer()即可通过使用数据服务的实例更新父组件中的数据。 示例代码如下所示:

this.dataService.setDataToRender({name:'Demo'});
编辑:

如果您在子组件的html中定义了模板。您可以使用
@ViewChild('template')模板在.ts中获取它:TemplateRef
子组件的html文件应具有:

<ng-template #template></ng-template>

问题是我不希望数据来自子组件,我想要一个可以在父组件中呈现的模板…我从未尝试过这一点,但您可以传递templateRef类型的对象,并使用createEmbeddedView将其添加到父组件中。我会尝试。谢谢。嘿,我已经编辑了答案。请仔细看看。
<ng-template #template></ng-template>
  @ViewChild('vc', {read: ViewContainerRef}) vc: ViewContainerRef;

  this.dataService.dataToRender.subscribe((data)={ 
   this.vc.insert(data);
   })