【问题标题】:Angular 2 append html to bodyAngular 2将html附加到正文
【发布时间】:2018-02-14 10:39:06
【问题描述】:

我开发了一个 Angular cli 项目并获得了很多表单来验证。我需要在显示时将表单验证消息附加到 app-root 之外。 我目前的实现如下。

  <app-root class="" _nghost-c0="" ng-version="4.3.4">
  <!-- other html content goes here...... -->
        <form [formGroup]="form">
           <label for="name">Name: </label>
           <input type="text" [formControl]="nameCtrl"/>
              <div *ngIf="!nameCtrl.valid && nameCtrl.hasError('required')"
                     class="error"><validation-msg>Name is required.</validation-msg></div>
              <div *ngIf="!nameCtrl.valid && nameCtrl.hasError('badName')"
                     class="error"><validation-msg>Name must start with <tt>pee</tt>.</validation-msg></div>
         </form>
  <!-- other html content goes here...... -->
    </app-root>

我只需要在显示时在 html 中显示如下错误消息。 validation-msg 是一个带有简单模板的组件。该内容必须附加到应用根目录之外。

    <app-root class="" _nghost-c0="" ng-version="4.3.4">
      <!-- other html content goes here...... -->
    </app-root>
    <validation-msg-content>
      <div>Name is required.</div>
    </validation-msg-content>

【问题讨论】:

  • 我对 Angular 了解不多,但看起来你需要一个“临时解决方法”来实现这一点。也许在 if? 中插入一些脚本标签
  • 您基本上需要将数据从一个组件传递到另一个组件。你可以在这里阅读更多关于它的信息angular.io/guide/component-interaction
  • 请检查更新的问题。它不是关于在组件之间共享数据。它是关于将组件模板附加到 app-root 元素的 pout 侧。
  • 您想将验证消息发送到其他组件吗?
  • 这不是将验证消息传递给另一个组件。请在ng-bootstrap.github.io/#/components/popover/examples 的正文部分检查 Append popover。我需要将我的消息添加到正文。

标签: javascript jquery twitter-bootstrap angular angular-cli


【解决方案1】:

如果是主要组件,那么您将无法执行此操作。但是如果这个表单本身就是一个组件,那么您可以将错误消息发送到包含该表单组件的父组件。

您需要在表单组件中使用@Output 和一个可以向父组件发出错误消息的事件发射器。现在,当父组件收到事件时,它可以显示错误消息。

所以表单组件代码应该是这样的:

import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
    selector: 'myform',
    templateUrl: './myform.component.html',
    styleUrls: ['./myform.component.css']
})

export class MyFormComponent  {
   @Output() sendData:any = new EventEmitter();

   validateForm(){
       this.sendData.emit({error});
   }

}

以及父组件HTML

<myform (sendData)="getError($event)"></myform>

现在您可以将 getError 方法定义为:

getError(event:Event){
    //Do whatever you want
}

【讨论】:

  • 请检查已编辑的问题。它不是将数据传递给另一个组件。它是关于在 app-root 元素之外附加 html。
  • 如果app-root 是主要的appComponent,那么validation-msg-content 必须是另一个模块。我不确定您是否可以在两者之间进行通信。简单的解决方案是将validation-msg-content 移动到app-root 中,并为表单创建另一个component
  • 请在 ng-bootstrap.github.io/#/components/popover/examples 的 body 部分检查 Append popover。我需要将我的消息添加到正文。
猜你喜欢
  • 2017-12-25
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多