【发布时间】:2017-09-06 07:29:40
【问题描述】:
我正在使用 Angular 4 Reactive Forms、“Ionic(3) 原生”UI 组件和来自各种“nested reactive forms" blogs/tutorials”的技术来创建一个动态的、多部分的数据输入应用程序。
我想要一个可重用的分段控件组件,它包含一个标题和一组选项(基于下拉选择),因此我不必创建多个几乎相同的子表单组件。
第一次效果很好,但是如果ion-segment 更改其按钮数量或其标签值(如果 2 个选项碰巧具有相同的选项,段按钮仍然可以正常工作)。
更改下拉列表和传入的段选项数组后,仍然可以选择常用选项,但我无法将“calf”或“yearling”设置为 Active(尽管在组件代码和 formGroup 模型中它确实得到放)。如果我首先选择“山羊”,它只有一个“未知”选项,那是我唯一可以选择的。
“Calf”只会变亮/禁用,而不是“Active”。这是我需要解决的问题。
它会正确更新以显示具有正确标签的正确数量的按钮,并且即使 formGroup 模型看起来已损坏,它也会正确更新它,但“活动”状态仅适用于第一个选择。我试过用(click)和(ionSelect)来调用按钮上的方法,但没有区别。
对于 Ionic 样式和 CSS 类,在对 @Input 按钮选项数组的后续更改中,基本上一切似乎都可以工作除了。
我的问题:
我在哪里/如何告诉 Ionic <ion-segment>只使用最新的值和段数?教程或 Ionic 文档中的示例使用带有 [(ngModel)] 数据绑定的静态列表和模板驱动表单,我不能使用反应式表单。这只有可以使用模板驱动的表单吗??
【问题讨论】:
-
我认为我明白你在问什么,但你能添加一些代码吗?很难提供这样的解决方案:-)
-
嗨@David - 是的,我最初发帖时是凌晨 1:30 :) 添加了代码和一些屏幕截图。可能是关于 Ionic 或 Angular 的一些非常简单的事情,我只是不知道我需要做什么来刷新视图的内容。也不太熟悉。
-
谢谢,代码太多了!所以我对此的最佳猜测是 Angulars 更改检测在这里玩了你的把戏。根据您的说法,模型已更新,但视图未更新 - Angular 似乎没有根据您的更改更新 DOM 树。幸运的是,我们可以使用 ChangeDetectorRef (angular.io/api/core/ChangeDetectorRef) 做到这一点。将其注入您的构造函数中,并在您进行更改后使用
.detectChanges()方法手动运行更改检测,该更改应由视图反映! -
谢谢 - 我之前看过
ChangeDetectionStrategy和ChangeDetectorRef但似乎没有任何效果。刚刚在ngOnChanges()、OnInit 和.subscribe()闭包中注入并尝试了this.ref.detectChanges()、this.ref.markForCheck()和this.ref.reattach()formControls。没有工作。 CDStrategy 是“默认”。使用this.ref.detach()做到了,所以我根本无法选择任何东西,所以这产生了效果,但方向错误:) 现在同样的问题与另一个组件更新数据,但 UI 没有。我应该在何时/何地使用 Ionic 组件更新 DOM?谢谢! -
通常你有一个离子组件的类级 ng-model 并且每次新数据到达(在你的情况下通过@Input)你更新这个模型。在您的情况下,合适的位置将是
ngOnChanges,因为此生命周期挂钩始终在 @Input 参数更改时运行。
标签: ionic3 ionic-native angular4-forms