首页 文章

角度如何通信显示哪个元素

提问于
浏览
0

研究员!

我正在为我的Web应用程序编写一个组件,例如一个表 . 表组件有时是隐藏的,这意味着它在组件树中但不显示给用户 . 例如:

<custom-tab> <!-- shown -->
  <custom-table /> 
</custom-tab>
<custom-tab> <!-- NOT shown -->
  <custom-table />
</custom-tab>

隐藏(未显示)自定义表组件将其数据加载到ngOnInit方法中,该方法由两个表(显示和未显示)的angular执行 . 如果我向表中添加特定的ngIf(评估是否显示选项卡),则不会调用ngOnInit方法 . 该解决方案非常麻烦,因为可能存在大型组件的非常复杂的场景,其决定是否显示组件 . 查看浏览器的DOM,我发现DOM中没有正确的自定义表元素 . Angular无论如何都要初始化这些组件(并调用ngOnInit) .

题:

  • 角度如何传达一个组件基本上在DOM中并且无法显示(忽略CSS)?

  • 如果组件未显示,那么如何有意义地禁止组件加载数据,并且只有在向用户显示数据时才加载数据?

谢谢!

2 回答

  • 0

    从Angular 1的角度讲,它适用于Two Way Data Binding . 概念 . 这实质上意味着视图和模型都可以使用相同的数据 .

    因此,无论您使用ng-if还是ng-show / ng-hide,数据都会出现在模型的视图中,反之亦然 . 它只是一个CSS的游戏(在ng-if / hide的情况下是否在ng-if或隐藏的情况下从DOM中删除)

  • 0

    不确定1)究竟是什么 . 也许这回答了你的问题 .

    如果传递给 *ngIf="..." 的表达式求值为 false*ngIf 将从DOM中删除该元素,并且该元素上的组件也将被销毁 . 当表达式求值为 true 时,将添加元素并重新创建组件 .

    Angular2每次执行更改检测时都会检查表达式 .

    您可以使用 [hidden]="..." 来防止删除组件,而只是隐藏组件 .

    另见What is the equivalent of ngShow and ngHide in Angular2?

    2)如果组件未添加到DOM,则组件不会加载数据 . 例如,如果将 *ngIf="evaluatesToFalse" 添加到元素中 . 此外,Angular不知道组件是否显示 .

相关问题