小编Kav*_*ody的帖子

在 Shadow DOM 中创建单选按钮

当我们要使用Shadow Dom创建自定义单选按钮作为 Web 组件时,就会出现问题。

通常,当我们使用单选按钮时,我们通常会为分组的单选框赋予相同的名称,如下所示。

<input type="radio" name="size" id="small" value="small">
<input type="radio" name="size" id="large" value="large">
Run Code Online (Sandbox Code Playgroud)

但是如果我们定义一些自定义元素(比如 cus-radio) -> 我们会以一种方式将名称和 ID 作为输入(来自父元素)并将它们放在自定义元素中。这将完全适用于正常情况。

但我的问题是影子 dom!当我们在 shadow dom 内创建元素时,其中的属性是可访问的或与外部 dom(主 dom)连接。那么,如果它的 name 和 id 属性在父 dom 中不可访问或通用,我们如何开发自定义单选按钮?

例子:-

我们将像这样开发我们的自定义元素(像角度元素中的伪代码)

radio.html:-

<input type="radio" [name]="name" [id]="id" ...>
Run Code Online (Sandbox Code Playgroud)

TS/逻辑文件:-

...
component cus-radio {
@Input() name: string;
@Input() id: string;
...
Run Code Online (Sandbox Code Playgroud)

无论我们在哪里使用它:-

<cus-radio [id]="'small'" [name]="'size'" value="small">
<cus-radio [id]="'large'" [name]="'size'" value="large">
Run Code Online (Sandbox Code Playgroud)

预期的行为应该是(就像在正常 dom 中发生的那样),这两个无线电输入必须相互关联并存在于两个相互理解中,就像一个被检查了另一个必须取消检查等。但在 shadow dom 中它没有。因为那些 name 和 id 在没有引用父 dom(主 dom)的 shadow …

javascript web-component shadow-dom custom-element angular-elements

7
推荐指数
1
解决办法
989
查看次数

Angular 元素作为反应形式的原生形式控件

我正在尝试将表单控件导出为 Angular 元素(Web 组件),并将其用作本机输入元素,以便它可以与 Angular 反应式表单或与本机 html 输入一起使用的类似库一起使用。

波纹管代码在作为模块中的角度组件导出时起作用。当我将它导出为 Web 组件并尝试以反应形式使用它时,我遇到了问题。

此代码是使用 Angular 7.1 框架编写的。

组件模板

<input ngDefaultControl value="value" />
Run Code Online (Sandbox Code Playgroud)

组件代码:

@Component({
  selector: 'cns-text-input',
  templateUrl: './text-input.component.html',
  styleUrls: ['./text-input.component.scss'],
  providers: [ {
    provide: NG_VALUE_ACCESSOR,
    useExisting:  forwardRef(() => TextInputComponent),
    multi: true
  }]
})
export class TextInputComponent implements ControlValueAccessor,     AfterViewInit {

  @ViewChild(DefaultValueAccessor) valueAccessor:     DefaultValueAccessor;

  public ngAfterViewInit() {
    console.log('value accessor', this.valueAccessor);
    console.log(this);
  }

  public writeValue(obj: any): void {
    this.valueAccessor.writeValue(obj);
  }
  public registerOnChange(fn: any): void {
    this.valueAccessor.registerOnChange(fn);
  }
  public registerOnTouched(fn: any): void {
    this.valueAccessor.registerOnTouched(fn);
  } …
Run Code Online (Sandbox Code Playgroud)

angular angular-elements

6
推荐指数
1
解决办法
1020
查看次数

Flutter 性能 - SetState 与 StreamBuilder

在 Flutter 中,哪种方式比高负载处理性能更好?

假设我们正在监听一个每秒发出大约 1000 条消息的流。哪种方式会有更好的性能?

1) 使用 setState() 类似

stream.listen((msg) => setState(() => _msg = msg)
Run Code Online (Sandbox Code Playgroud)

然后在构建方法中

return Text(_msg);
Run Code Online (Sandbox Code Playgroud)

2)使用流生成器

StreamBuilder(
              stream: stream,
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  return Text(snapshot.data)
                  );
                }
              },
            )),
Run Code Online (Sandbox Code Playgroud)

flutter

4
推荐指数
1
解决办法
3908
查看次数