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