angular属性绑定是否有聚合的写法

发布于 2022-09-12 23:17:43 字数 211 浏览 12 评论 0

component1 有多个@input输入属性,使用时能否通过一个对象完成多个属性的绑定,而不是对每个属性使用[]进行绑定?
或者是否存在方法从类中直接绑定?

目前研究过hostbinding和动态组件方案,前者只能绑定html原生的属性,而且只适用于宿主元素,后者是可以手动改变组件instance属性的值,但没有建立绑定关系。

主要是为了大量属性绑定的时候写起来简洁方便。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尛丟丟 2022-09-19 23:17:43

如果是动态组件的话,可以考虑这样写

 data: { name: string, age: number; } = {name: '12', age: 22};
  @ViewChild('container', {static: true, read: ViewContainerRef})
  container!: ViewContainerRef;
  constructor(private renderer2: Renderer2, private componentFactoryResolver: ComponentFactoryResolver) {
  }

  ngOnInit(): void {
    const com: ComponentFactory<UserComponent> = this.componentFactoryResolver.resolveComponentFactory(UserComponent);
    const userComponentComponent = this.container.createComponent(com);
    Object.assign(userComponentComponent.instance, this.data); //set input
  }

绑定关系的话,似乎没有什么好办法,只能每次都重新set一下input的值
比如变更后再次调用
Object.assign(userComponentComponent.instance, this.data);

如果是为了多个属性输入方便的话,在组件设计的时候,就可以考虑用object来接收对象
如果是第三方组件,那好像没什么办法了

/*@Input()
  name!: string;
  @Input()
  age!: number;*/
  @Input()
  userInfo: { name?: string, age?: number; } = {};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文