## ViewContainerRef
表示可以附加一个或多个视图的容器。
容器可以包含两种视图。通过`createComponent`实例化组件创建的宿主视图(Host View)和通过`createEmbeddedView`实例化嵌入模板创建的嵌入视图。
在包含视图内的视图容器的位置由锚点元素指定。每个视图容器只能有一个锚点元素,每个锚点元素只能有一个视图容器。
附加到此容器的视图的根元素将成为渲染视图中锚点元素的兄弟。
要访问元素的`ViewContainerRef`,您可以放置一个在元素上使用`ViewContainerRef`注入的指令,或者通过`ViewChild`查询获取它。
### 类定义
```typescript
class ViewContainerRef {
element : ElementRef
injector : Injector
parentInjector : Injector
clear() : void
get(index: number) : ViewRef
length : number
createEmbeddedView(templateRef: TemplateRef<C>, context?: C, index?: number) : EmbeddedViewRef<C>
createComponent(componentFactory: ComponentFactory<C>, index?: number, injector?: Injector, projectableNodes?: any[][]) : ComponentRef<C>
insert(viewRef: ViewRef, index?: number) : ViewRef
move(viewRef: ViewRef, currentIndex: number) : ViewRef
indexOf(viewRef: ViewRef) : number
remove(index?: number) : void
detach(index?: number) : ViewRef
}
```
### 属性
- element: `ElementRef`
描点元素,用于指定此容器在包含视图中的位置。
- injector : `Injector`
- parentInjector: `Injector`
- clear() : `void` 销毁容器中的所有视图
- get(index: `number`) : `ViewRef` 返回此容器中指定索引的视图所对应的`ViewRef`。
- length: `number` 返回当前附加到此容器的视图数。
- createEmbeddedView(templateRef: `TemplateRef<C>`, context?: C, index?: `number`) : `EmbeddedViewRef<C>`
基于`templateRef`实例化嵌入视图并将其插入到当前容器的指定索引处。
如果未指定`index`,则新视图将作为为容器的最后一个视图插入。
返回新创建视图的`ViewRef`对象。
- createComponent(componentFactory: `ComponentFactory<C>`, index?: `number`, injector?: `Injector`, projectableNodes?: any[][] : `ComponentRef<C>`)
实例化单个组件并将其宿主视图(Host View)插入此容器指定的索引处。
组件使用`ComponentFactory`实例化,并通过`ComponentFactoryResolver`获取。
如果未指定`index`,则新视图将作为为容器的最后一个视图插入。
可以选择指定`Injector`作用于当前组件的父节点。
返回新实例化组件的Host View的`ComponentRef`。
- insert(viewRef: `ViewRef`, index?: `number`) : `ViewRef`
在容器指定索引处插入一个被`ViewRef`标识的视图。
如果未指定`index`,则新视图将作为为容器的最后一个视图插入。
- move(viewRef: `ViewRef`, currentIndex: `number`) : `ViewRef`
将`ViewRef`标识的视图移动到容器指定`index`处。
- indexOf(viewRef: `ViewRef`) : `number`
返回在当前容器中通过ViewRef指定的视图的索引,如果此容器不包含视图,则返回-1。
- remove(index?: `number`) : `void`
销毁指定索引处附加到此容器的视图。
如果未指定index,容器中的最后一个视图将被删除。
- detach(index?: `number`): `ViewRef`
与`insert`一起使用以在当前容器中移动视图。
如果省略索引参数,则会删除最后一个ViewRef。
- 说明
- angular 1.x
- ngModelController
- ngOptions
- ngModelOptions
- lifecycle
- directive
- angular 2
- @angular/forms
- 类
- AbstractControl
- AbstractControlDirective
- AbstractFormGroupDirective
- FormControl
- FormArray
- FormBuilder
- FormGroup
- NgControl
- 接口
- controlValueAccessor
- 指令
- DefaultValueAccessor
- Angular 2 生命周期
- OnInit
- DoCheck
- @angular/router
- 配置
- Routes
- 指令
- RouterOutlet
- RouterLink
- 接口
- ActivatedRoute
- UrlTree
- NavigationExtras
- ActivatedRouteSnapshot
- RouterStateSnapshot
- 类
- UrlSegment
- UrlSegmentGroup
- UrlSerializer
- DefaultUrlSerializer
- Router
- bug记得
- @angular/http
- 类
- Http
- Body
- Response
- ResponseOptions
- Header
- Request
- RequestOptions
- URLSearchParams
- @angular/core
- decorator
- Component-decorator
- animation
- DI
- linker
- TemplateRef
- ElementRef
- EmbeddedViewRef
- ViewRef
- ViewContainerRef
- Query
- ComponentFactory
- ComponentRef
- Renderer
- change_detection
- KeyValueDiffers
- IterableDiffers
- ChangeDetectorRef
- ChangeDetectionStrategy
- Zone
- ngZone
- @angular/common
- 指令
- NgTemplateOutlet
- QueryList
- bootstrap4
- card
- form
- 重点关注博客
- 学习过的文章
- 笔记
- Angular 2 双向绑定
- 将字符串解析成DOM
- rx相关
- operators
- combineLatest
- combineAll
- concat(All, Map, *MapTo)
- 背压(backpressure)
- js事件keycode对应表
- 装饰器
- 有用的代码摘录
- 日期操作
- 数量操作
- 字符操作
- rxjs问题
- 小示例
- h5面试准备
- react
- 开发遇到的问题