- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了尝试学习 Angular 2,我正在制作一个饮食追踪器,以配合我和我妻子正在尝试的最新时尚饮食。这本书有几个可以用按钮回答的问题(你有多饿——饿了,很饿,等等)加上一个可选的文本输入。还有基于复选框的问题,以及日期。
我正在尝试创建一个由这些多个组件组成的表单——一个用于按钮问题,一个用于复选框问题。看这个plunker .
我很好奇的是将组件(每个组件都有自己的表单元素)组合到 Daily 表单中的惯用方式。每个子组件都有表单元素,还使用 *ngFor
循环访问外部文件 (question-data.ts
) 中的数据。目前,每个组件都有一个 Daily 表单订阅的事件发射器。
这是每日表单模板(src/daily.component.ts
):
<form>
<h1>Daily Tracker</h1>
<br>
<legend>Date</legend>
<date-picker (onDataEntered)="dateDataEntered($event)"></date-picker>
<br>
<br>
<button-questions
*ngFor="#b of buttonQuestions"
[btn]="b"
(onDataEntered)="buttonDataEntered($event)">
</button-questions>
<checkbox-questions
*ngFor="#c of checkboxQuestions"
[cbox]="c"
(onDataEntered)="checkboxDataEntered($event)">
</checkbox-questions>
<br>
<input type="submit" value="Submit" class="btn btn-primary">
</form>
然后,例如,buttonQuestions
会像这样呈现 (src/button-questions.component.ts
):
<form>
<h1>Daily Tracker</h1>
<br>
<legend>Date</legend>
<date-picker (onDataEntered)="dateDataEntered($event)"></date-picker>
<br>
<br>
<button-questions
*ngFor="#b of buttonQuestions"
[btn]="b"
(onDataEntered)="buttonDataEntered($event)">
</button-questions>
<checkbox-questions
*ngFor="#c of checkboxQuestions"
[cbox]="c"
(onDataEntered)="checkboxDataEntered($event)">
</checkbox-questions>
<br>
<input type="submit" value="Submit" class="btn btn-primary">
</form>
dataEntered()
方法执行此操作(此方法也会在单击任何按钮时调用):
private dataEntered(): void {
this.btn.inputText = this.inputTextControl.value;
this.onDataEntered.emit(this.btn);
}
Daily
组件然后订阅其子组件上的事件发射器,并将处理最终验证/数据库接口(interface)(我仍在努力学习这部分)。
但我觉得在子组件上使用原始事件监听器是错误的方法:例如,我不知道如何将子组件上的验证器连接在一起以对整个表单进行验证。我也不认为我正在完全使用内置的 Angular 2 功能。而且我感觉好像不符合我理解的松耦合原则。
我倾向于以某种方式将子组件收集到 Daily
组件中的主 ControlGroup
中,但我不确定该怎么做。
谢谢!
最佳答案
我不知道这种方法是否是首选,但这是一种方法。子组件可以使用 @angular/forms
中的 ControlContainer
来访问其父控件的 FormGroup
。
父组件 TypeScript 文件:
// imports go here
@Component({
selector: "app-parent",
templateUrl: "./parent.component.html",
styleUrls: ["./parent.component.css"]
})
export class ParentComponent implements OnInit {
// Just create a typical FormGroup.
fg: FormGroup;
// Instantiate the FormGroup using your preferred method.
constructor(fb: FormBuilder) {
this.fg = this.fb.group({ FirstName: "John", LastName: "Doe" });
}
}
父组件模板文件:
<!-- Bind a form in the parent component to your FormGroup. -->
<form [formGroup]="fg">
<!-- Reference the child component. No need for @Inputs or fancy bindings. -->
<app-child></app-child>
</form>
子组件 TypeScript 文件:
import { Component } from "@angular/core";
import { ControlContainer } from "@angular/forms";
@Component({
selector: "app-child",
templateUrl: "./child.component.html",
styleUrls: ["./child.component.css"]
})
export class ChildComponent {
// Ask the framework for a ControlContainer whose control property has the goods.
constructor(public controlContainer: ControlContainer) { }
ngOnInit(): void {
}
}
子组件模板文件:
<!-- Finally, bind some top-level element to the imported FormGroup. -->
<fieldset [formGroup]="controlContainer.control">
<legend>Reusable Controls Go Here</legend>
<div>
First Name
<!-- Now, use the FormGroup per normal. -->
<input formControlName="FirstName" type="text" />
</div>
<div>
Last Name
<input formControlName="LastName" type="text" />
</div>
<div>
Accessing the FormGroup
<!-- You can even get fancy. -->
{{ controlContainer.control.get('FirstName')?.errors | json }}
</div>
</fieldset>
关于forms - Angular 2 : Idiomatic way to compose forms from multiple components,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35855115/
我第一次决定切换到 InnoDB 并尝试使用外键和其他 InnoDB 功能。 创建关系时,我应该只在一张表上声明它们吗?还是两个表? 例如,对于以下每种情况,您将在何处以及如何声明关系? 1 用户有很
老方法 当我以前在需要内容被搜索引擎索引的项目中异步加载页面时,我使用了一种非常简单的技术,那就是 Page $('#example').click(function(){
我目前正在为自己创建自己的自定义应用程序来编译 Java 文件。我的应用程序可以完美地编译 Java 文件,但现在我想开始为 Java 文件添加某种类型的测试(例如,我将一些变量传递给许多不同的文件
我需要建立从我的 iPhone 应用程序到客户服务器的 HTTPS 双向 SSL 连接。但是我没有看到任何安全的方式来将客户端证书传递给应用程序(这是一个电子银行应用程序,所以安全性确实是一个问题)。
我从事 Java 工作已经很长时间了,大约 6 个月前开始使用 Scala。我喜欢这门语言。我发现的一件事是,做事有多种方法。我不知道这是因为该语言的性质,还是因为它还很年轻并且在不断发展,习惯用法和
这是我所指的示例代码。 https://sites.google.com/site/ssljavaguide/example-code/2-way-ssl 我是否可以不设置与 keystore 相关的
我读过有关使用 MySQL AES_ENCRYPT/AES_DECRYPT(双向加密)不如使用 PHP - hash()(单向加密)安全的信息。 http://bytes.com/topic/php/
我正在进行一个路线选择项目,我需要使用道路类型和单向/双向交通信息填充道路网络。我想知道Tiger/Line道路数据集是否包含这样的数据。。我下载了加利福尼亚州的Tiger/Line道路数据集,但没有
我需要开发一个 iPad 应用程序,它应该管理两种方向模式(横向和纵向)。 根据 official Apple iOS documentation , 有 2 种方法可以继续。 -第一个包括在收到旋转
我正在训练一个 randomForest 模型,目的是保存它以进行预测(它将被下载并在外部上下文中使用)。我希望这个模型尽可能最小。 我读到有很多options和 packages减少模型的内存大小。
为什么将参数传递给匿名函数会影响结果?例如,下面的脚本将 a1 显示为 function(),将 a2 显示为数组。 var a1=(function(){return [1*2,2*2,3*2];}
我有一个 Python 列表: listx = [["a", 127, "Blue", 0], ["b", 127, "Red", 1], ["b", 127, "
在查看 Java 库时,特别是构造函数,我注意到字段通常会出于某种原因进行初始化和验证: public java.awt.Color(int r, int g, int b, int a) {
我想编写 Git 脚本。只创建一个 Unix 脚本是最好的方法吗? #!/bin/bashgit push origin master &&git checkout develop &&git mer
这个问题在这里已经有了答案: class or method alias in java (8 个回答) 去年关闭。 我有一个类的名称可能不必要地繁琐,其中包含许多我在其他地方使用的静态方法。 而不是
这个问题在这里已经有了答案: Best way to check function arguments? [closed] (14 个回答) Parameter validation, Best pr
在阅读我遇到的代码时,结构的以下定义和初始化: // header file struct foo{ char* name; int value; }; //Implementation file s
我正在使用多页表单方法在 Drupal 中开发一个自定义模块,并且我希望对步骤进行可视化。 步骤 1 > [_Step_2_] > 步骤 3 > 完成 商业规则: 他们总是能看到所有的步骤,以及他们现
Josh 的 answer 给我留下了深刻的印象关于客户端的“Angular 方式”和声明式风格。 但是你能帮我理解一下,怎么做吗: 我有一个单页应用程序,左侧是菜单栏,右侧是 div 容器。 当用户
Subversion 商店正在考虑改用 Mercurial,试图提前弄清楚开发人员的所有提示将是什么。这里有一个相当常见的用例,我不知道如何处理。 我正在研究一些较大的功能,我有一个重要的代码部分——
我是一名优秀的程序员,十分优秀!