我应该如何配置新的角度8视图子?
@ViewChild('searchText', {read: ElementRef, static: false})
public searchTextInput: ElementRef;
VS
@ViewChild('searchText', {read: ElementRef, static: true})
public searchTextInput: ElementRef;
哪一个好些?什么时候应该使用静态:true
和静态:false
?
在大多数情况下,您将希望使用{static:false}
。这样设置它将确保找到依赖于绑定解析的查询匹配(如结构指令*NGIF等..
)。
何时使用statice:false
的示例:
@Component({
template: `
<div *ngIf="showMe" #viewMe>Am I here?</div>
<button (click)="showMe = !showMe"></button>
`
})
export class ExampleComponent {
@ViewChild('viewMe', { static: false })
viewMe?: ElementRef<HTMLElement>;
showMe = false;
}
static:false
将是Angular 9中的默认回退行为。在这里和这里阅读更多内容
引入{static:true}
选项是为了支持即时创建嵌入式视图。当您动态创建视图并希望访问TemplateRef
时,您将无法在NGAfterViewInit
中这样做,因为这将导致ExpressionHasChangedAfterChecked
错误。将静态标志设置为true将在ngoninit中创建视图。
尽管如此:
在大多数其他情况下,最佳实践是使用{static:false}
。
但是请注意,{static:false}
选项将在Angular 9中成为默认值。这意味着不再需要设置static标志,除非您希望使用statice:true
选项。
您可以使用angular cling update
命令自动升级当前的代码库。
有关迁移指南和更多信息,您可以查看这里和这里
#静态查询和动态查询有什么区别?@viewChild()和@contentChild()查询的静态选项确定查询结果何时可用。
对于静态查询(static:true),查询在视图创建后解析,但在更改检测运行之前解析。但是,结果永远不会更新以反映对视图的更改,例如对ngIf和ngFor块的更改。
对于动态查询(静态:false),查询分别在@ViewChild()和@ContentChild()的ngAfterViewInit()或ngAfterContentInit()之后解析。对于您的视图的更改,如对ngIf和ngFor块的更改,将更新结果。
使用statice:true
的一个好用例是使用fromevent
绑定到模板中定义的元素。请考虑以下模板:
<div [ngStyle]="thumbStyle$ | async" #thumb></div>
然后,您可以处理该元素上的事件,而不需要使用订阅或init挂钩(如果您不想或不能使用角度事件绑定):
@Component({})
export class ThumbComponent {
@ViewChild('thumb', { static: true })
thumb?: ElementRef<HTMLElement>;
readonly thumbStyle$ = defer(() => fromEvent(this.thumb, 'pointerdown').pipe(
switchMap((startEvent) => fromEvent(document, 'pointermove', { passive: true })
// transform to proper positioning
));
}
使用defer
是很重要的。这将确保observable仅在订阅时才解析。这将发生在NGAfterViewInit
被触发之前,当Async
管道订阅它时。因为我们使用的是statice:true
,所以已经填充了this.thumb
。
问题内容: 将所有导入内容转换为多重要?为什么人们仍然不愿意使用? 问题答案: 如文档所述,请谨慎使用。寻找那里的理由。
问题内容: 我不太清楚当我这样说时会做什么: 我可以稍微了解使用它的原因,因为它不浏览整个数据库表以更新字段,而是仅更新新添加的记录。如我错了请纠正我。 所以我想做的是使用这样创建索引: 一旦执行此操作,文档就根本不会上传到索引。我要去哪里错了? 任何帮助,不胜感激。 问题答案: 如果您的表中有一个时间戳列(例如),则最好使用它代替ID号。这样,当记录更新时,您也可以修改该时间戳,输入插件将提取记
问题内容: 在Objective- C中,我调用该方法来记录异常。如何在Swift中调用它? 问题答案: 使用Swift 2,您可以将Swift函数和闭包作为C函数指针传递 原始答案 从Xcode 6 beta 6开始,您不能这样做。 Swift确实支持传递函数指针,但是它们几乎就像不透明指针一样被对待。您既不能定义指向Swift函数的C函数指针,也不能在Swift中调用C函数指针。 这意味着您从
问题内容: 这个问题在很多地方都被问到,变化不尽。例如Java-getClassLoader()。getResource()不仅使我烦恼不已。)我仍然无法使其正常工作。 这是一个代码片段: 此作品-请注意,我硬编码的路径,包含剪辑文件,该文件的目录 是 有,而且 是 在同一目录作为我的.class文件。las,注释掉的代码仅返回url的空值。 其他大多数帖子似乎都涉及getResourceAsSt
问题内容: 我正在解决这个问题,有没有一种方法可以覆盖Java中的类变量? 第36条反对意见是: 如果您看到,请运行。 谁能解释为什么皱眉呢? 问题答案: 这是一个风格上的问题,而不是直接的问题。这表明您没有正确考虑班上正在发生的事情。 考虑一下什么意思: 此变量存在于类级别,在每个实例 中并不单独存在,并且在扩展me的类中没有独立存在 。 考虑一下什么意思: 该变量可以在此类,同一包中的 类以及
问题内容: 我使用RedisConnection Set方法设置字节数组,但是如何获取数据?get返回包装的字节数组吗? 链接: http://code.google.com/p/booksleeve/ http://code.google.com/p/protobuf-net/ 这可行,但感觉不对: 更多信息: 问题答案: 那是完全正确的。“ Get”(BookSleeve)返回一个deferr