在Angular中,可以使用ng-content和令牌提供来使投影内容找到内部模板的令牌而不是外部DOM的令牌。
首先,需要定义一个令牌,可以是InjectionToken或OpaqueToken。这个令牌将用于标识内部模板。
import { InjectionToken } from '@angular/core';
export const INTERNAL_TEMPLATE_TOKEN = new InjectionToken('internalTemplateToken');
然后,在内部模板中使用ng-content指令,并将令牌提供给ng-content的select属性。
接下来,在父组件中,使用providers属性来提供令牌,并将其设置为使用内部模板的组件。
import { Component, provide } from '@angular/core';
import { INTERNAL_TEMPLATE_TOKEN } from './internal-template.token';
@Component({
selector: 'app-parent',
template: `
Parent Component
`,
providers: [
provide(INTERNAL_TEMPLATE_TOKEN, { useExisting: ParentComponent })
]
})
export class ParentComponent {}
现在,可以在内部模板中使用令牌来标识内部模板。
Internal Template
最后,在父组件的模板中使用子组件,并将其包裹在标识了令牌的标签中。
External Template
这样,Angular会根据令牌找到内部模板,并将其投影到父组件中,而不是将外部模板投影到父组件中。
请注意,以上代码仅为示例,实际使用时可能需要根据具体需求进行适当的调整和修改。