首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular 5插入动态输入属性

Angular 5插入动态输入属性
EN

Stack Overflow用户
提问于 2018-01-28 03:46:28
回答 3查看 11.3K关注 0票数 1

我想将属性动态地插入到一个输入html标签中,但我不知道该怎么做:

我从组件端得到了这段代码:

代码语言:javascript
复制
import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-transclusion',
  templateUrl: './transclusion.component.html',
  styleUrls: ['./transclusion.component.css']
})
export class TransclusionComponent implements OnInit {

  elements: any;

  constructor() { }

  ngOnInit() {
    this.elements = {};
    this.elements.name = 'TEST1';
    this.elements.type = 'text';
    this.elements.value = '12';
    this.elements.placeholder = 'PRUEBA';
    this.elements.maxlength = '10';

    // This is only for test elements keys
    for (const el in this.elements) {
      if (this.elements.hasOwnProperty(el)) {
        console.log(`${el}: ${this.elements[el]}`);
      }
    }
  }
}

这是我的模板面:

代码语言:javascript
复制
<input  type="text"
        [attr.name]="elements.name"
        [attr.value]="elements.value"
        [attr.placeholder]="elements.placeholder"
        [attr.maxlength]="elements.maxlength"/>

我希望任何'forin‘类方法迭代每个元素属性,并在input标记上动态插入,因此它的结果如下:

代码语言:javascript
复制
<input type="text"
       [attr.*for="el in elements"]="el"/>

我如何实现这一点?

向安东尼奥致以最美好的问候

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-28 04:07:55

如果你想使用属性来“配置”你的输入域,你应该使用directives instad of a component...

如果需要修改在其上应用指令的原生元素,请使用angular附带的renderer service

票数 1
EN

Stack Overflow用户

发布于 2018-01-28 06:28:04

我刚刚用这个解决了这个问题

代码语言:javascript
复制
import { Component, Renderer2, ElementRef, OnInit } from '@angular/core';

@Component({
  selector: 'app-transclusion',
  templateUrl: './transclusion.component.html',
  styleUrls: ['./transclusion.component.css']
})
export class TransclusionComponent implements OnInit {

  elements: any;

  constructor(private renderer: Renderer2, private el: ElementRef) { }

  ngOnInit() {
    this.elements = {};
    this.elements.name = 'TEST1';
    this.elements.type = 'text';
    this.elements.value = '12';
    this.elements.placeholder = 'PRUEBA';
    this.elements.maxlength = '10';

    const div = this.renderer.createElement('input');

    for (const el in this.elements) {
      if (this.elements.hasOwnProperty(el)) {
        this.renderer.setAttribute(div, el, this.elements[el]);
      }
    }
    this.renderer.appendChild(this.el.nativeElement, div);
  }

}

感谢所有的@nikolaus和@gab

票数 2
EN

Stack Overflow用户

发布于 2018-01-28 03:58:39

如果您想要动态更改单个<input>标记的属性,我建议您使用@ViewChild。例如,

代码语言:javascript
复制
import { Component, AfterViewInit, ElementRef } from '@angular/core';

@Component({
  selector: 'app-transclusion',
  template: `
    <input #foobar/>
    `,
  styleUrls: ['./transclusion.component.css']
})
export class TransclusionComponent implements AfterViewInit {

  @ViewChild('foobar') foobar: ElementRef;

  constructor() { }

  ngAfterViewInit() {
    this.foobar.nativeElement.value = 'foobar';
    // change other values of element
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48479875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档