- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个自定义组件,以这种方式对一些单选按钮进行分组
<group>
<radio></radio>
<radio></radio>
<radio></radio>
</group
在组件内部,我动态地为输入添加一个名称,因此它们都具有相同的名称,并且当我单击另一个名称时会更改所选的名称。
如果我只有一个组件,它会很好地工作,如果我有多个组件,它会扩展值,就像它只是一组只有一个名称的 RadioButtons 一样。
这是我正在使用的代码:
import {AfterViewInit, Component, ContentChildren, ElementRef, Input, NgModule, QueryList} from "@angular/core";
import {CommonModule} from "@angular/common";
import {ControlValueComponent} from "../shared/ControlValueComponent";
import {SysSharedModule} from "../shared/SysSharedModule";
@Component({
selector: 'sys-radio-button',
styleUrls: ['sysRadioButton.css', '../shared/sys.css'],
providers: ControlValueComponent.providerValueAcessor(SysRadioButton),
template: `
<input type="radio" id="rb{{randomId}}" [value]="val" [(ngModel)]="value">
<label for="rb{{randomId}}">{{label}}</label>
`
})
export class SysRadioButton extends ControlValueComponent {
constructor (public elem: ElementRef) {
super();
}
@Input() groupName = 'radiobutton';
@Input() val: any;
@Input() label: string;
randomId = (Math.floor(Math.random() * (1 - 10000 + 1)) + 1) * -1;
}
@Component({
selector: 'sys-radio-group',
styleUrls: ['sysRadioButton.css', '../shared/sys.css'],
providers: ControlValueComponent.providerValueAcessor(SysRadioGroup),
template: `
<div class="t{{tam}}">
<label class="header">{{header}}</label>
<div class="radioButtonContainer"></div>
</div>
`
})
export class SysRadioGroup extends ControlValueComponent implements AfterViewInit {
@Input() name: string;
@Input() header: string;
@Input() tam = '3-of-10';
@ContentChildren(SysRadioButton) radioButtons: QueryList<SysRadioButton>;
constructor (public elem: ElementRef) {
super();
}
ngAfterViewInit() {
this.addNameToInputs();
}
addNameToInputs() {
const container = this.elem.nativeElement.getElementsByClassName('radioButtonContainer')[0];
this.radioButtons.forEach(item => {
const input = item.elem.nativeElement;
input.getElementsByTagName('input')[0].name = this.name;
container.appendChild(input);
});
}
}
@NgModule({
imports: [CommonModule, SysSharedModule],
declarations: [SysRadioButton, SysRadioGroup],
exports: [SysRadioButton, SysRadioGroup]
})
export class SysRadioButtonModule {
}
我这样使用它:
<sys-radio-group header="Select your destiny" name="name1">
<sys-radio-button val="hola1" label="Label 1"></sys-radio-button>
<sys-radio-button val="hola2" label="Label 2"></sys-radio-button>
<sys-radio-button val="hola3" label="Label 3"></sys-radio-button>
<sys-radio-button val="hola4" label="Label 4"></sys-radio-button>
</sys-radio-group>
<sys-radio-group header="Select your destiny" name="name2">
<sys-radio-button val="hola1" label="Label 1"></sys-radio-button>
<sys-radio-button val="hola2" label="Label 2"></sys-radio-button>
<sys-radio-button val="hola3" label="Label 3"></sys-radio-button>
<sys-radio-button val="hola4" label="Label 4"></sys-radio-button>
</sys-radio-group>
以下是其工作原理的一些图像
如果我检查 chrome 控制台中的元素,我可以看到名称有何不同,所以我不明白为什么会发生这种情况
编辑
扩展主类的 ControlValueComponent 类只是用于自定义表单的类。这是代码:
import {ControlValueAccessor, NG_VALUE_ACCESSOR} from "@angular/forms";
import {forwardRef, Input} from "@angular/core";
export class ControlValueComponent implements ControlValueAccessor {
@Input() disabled: boolean;
innerValue: any = '';
static providerValueAcessor( ref: any): any {
return [
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ref), multi: true }
];
}
onTouchedCallback: () => void = () => {};
onChangeCallback: (_: any) => void = () => {};
constructor() {
}
get value(): any {
return this.innerValue;
}
set value(v: any) {
if (v !== this.innerValue) {
this.innerValue = v;
this.onChangeCallback(v);
}
}
writeValue(value: any) {
if (value !== this.innerValue) {
this.innerValue = value;
}
}
registerOnChange(fn: any): void {
this.onChangeCallback = fn;
}
registerOnTouched(fn: any): void {
this.onTouchedCallback = fn;
}
}
这就是 [(ngModel)] 的“值”变量的来源
最佳答案
将 ngModel 更改为:
[(ngModel)]="val"
关于javascript - RadioButtons 行为奇怪 Angular 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47188058/
我一直在尝试使用 RadioButton 将另一个 RadioButton 变为可见。我是这个环境的新手,这是我的第一个 Windows Phone 应用程序。我的代码: private void
我有一个 GroupBox 和一堆 RadioButtons。当他们有焦点时,我可以使用向上/向下键来遍历它们。 但是,当我手动更改已选中的 RadioButton 并按向上/向下键时,迭代将从更改已
使用 WPF 和 MVVM 模式,我得到了一个动态填充单选按钮的列表框。
我有一个带有四个单选按钮的 RadioGroup,我让它们使用 4 的权重和在屏幕上均匀地隔开它们。这很好用,但结果是图形左对齐,而不是在每个单选按钮的中心。有没有办法将图形移动到中心?我尝试了重力中
我有 3 个单选按钮,用于对 API 中的不同数据进行排序。在每个单选按钮上,如果我按另一个单选按钮,单选按钮值就会消失,如下所示: 和 。我尝试使用属性绑定(bind) [value],但这导致了错
假设我有几个单选按钮和一些自定义对象作为数据源。 举个例子 public enum SomeModeType { firstMode = 10, secondMode = 20,
我正在尝试设置对单选组中第一个单选按钮的选择。在深入探讨这个问题之前,我需要指出问题仅发生在 API <= 16 中。当在模拟器或真实设备中运行 API 17 或更高版本时,一切正常。 它应该做什么
对于android编程,我有一个RadioGroup,其中包含一些RadioButtons。我只想从按钮获取文本,而不需要获取 RadioButton 的 id。
我编写了以下脚本,一旦单击要取消选中的其他复选框,它的工作正常,但是一旦我单击 tabkey,它就不会被选中或取消选中,它只会获得焦点, 脚本 function toggle(obj) { i
我有一个单选组,我可以在其中以编程方式添加单选按钮。这一切都是在 onCreateView() 方法中完成的,因此每次从后台堆栈重新创建 fragment 时都应该重做。我遇到的问题是,当我在开始时使
假设我在 RadioButtonGroup 中有一些 RadioButton。我单击其中一个,我意识到我不应该提交表单,相反,我只想触发取消操作并返回到我未选择的原始状态。我该怎么做? 最佳答案 想通
在我的布局中,我有一个 AppCompatRadioButton。使用 app:buttonTint 我将按钮设置为白色。如果我检查了 AppCompatRadioButton,圆圈的填充颜色也是白色
我正在开始使用 JavaFX,并且我已经构建了一个小俄罗斯方 block 游戏。现在一切正常,但最后我决定添加一组单选按钮来选择难度 - 这里我遇到了一个问题:突然LEFT/RIGHT/UP/DOWN
我的 RadioGroup 中的 RadioButton 在我取消选中它们或单击组中的另一个 RadioButton 后留下一个黑色的选中圆圈。我该如何防止这种情况发生?
在每个场景中,我都有多个切换组,每个切换组有两个单选按钮。无论我首先选择哪个场景上的哪个 RadioButton,听众都不会明白。它仍然为空,而不是保存设置的用户数据。如果我按第二次,它就会起作用。
我有一个有 2 个字段的应用程序:company_name 和 logo,我在 Model 的 Form 中显示像单选按钮这样的公司,但我想显示 logo 公司而不是公司标签(公司名称) 任何的想法
所以我想在我的应用程序中添加一个计算器。用户将首先单击适用于英制和公制单位的 RadioButton,然后根据用户单击的单选按钮,将出现其中一种布局。 如您所知,英制单位有英尺和英寸,为此我需要两个
我正在开发一个订单应用程序。如果实际时间在开放时间,则应将 rdi_now 的可见性设置为可见,否则设置为消失,因此用户在关闭时间只有选择预购的选项,但 rdi_preorder 没有做应该做的事情。
我在尝试单击时检查和取消选中单选按钮时遇到了一些问题。 我想做的是,当加载 Activity 时,单选按钮默认设置为选中。当用户按下选中的单选按钮时,我将单选按钮设置为取消选中并清空 TextView
我有三个单选按钮,我希望根据我单击的复选框上传我的 GUI。 我引用过本指南:http://docs.oracle.com/javafx/2/ui_controls/radio-button.htm这
我是一名优秀的程序员,十分优秀!