Angular NativeScript元素默认显示问题:如何默认隐藏元素?
解决Angular NativeScript中元素初始闪现的问题
这个闪现问题其实是NativeScript和Angular初始化渲染顺序导致的——NativeScript会先根据XML的默认属性渲染原生控件,之后Angular的数据绑定才会生效。你虽然在组件里初始设置了isLoading = true,但绑定生效前,StackLayout的visibility是默认的visible,所以会先显示一下再被隐藏。
下面给你几个简单有效的解决方案:
方案1:给XML元素设置静态初始visibility
直接在StackLayout上先写死静态的visibility="collapse",再叠加动态绑定:
<StackLayout visibility="collapse" [visibility]="isLoading ? 'collapse' : 'visible'"> <Label text="Hi there"></Label> </StackLayout>
这样NativeScript初始化时会先把元素设为折叠状态,等Angular的绑定逻辑生效后,因为isLoading初始值是true,最终visibility还是collapse,不会有状态切换,自然就不会出现闪现了。
方案2:使用*ngIf完全控制元素渲染(按需选择)
如果你的业务场景允许加载状态下元素完全不被创建(而不是只是隐藏),可以用Angular的*ngIf指令替代visibility绑定:
组件代码不需要修改,XML改成:
<StackLayout *ngIf="!isLoading"> <Label text="Hi there"></Label> </StackLayout>
因为初始isLoading = true,*ngIf会直接阻止元素渲染,直到isLoading变为false时才会创建并显示元素,从根源上避免了闪现问题。不过要注意,*ngIf会销毁和重建元素,如果你需要保留元素的状态或者监听它的生命周期事件,方案1会更合适。
额外提示
这两个方案都是NativeScript开发中解决初始渲染闪现的常用手段,根据你的实际需求选一个就行,方案1更适合需要保留元素实例的场景,方案2则更轻量化。
内容的提问来源于stack exchange,提问作者Matt Westlake
相关产品推荐
相关产品推荐

