angular - 角度 6 中的 BootStrap 模态问题
问题描述
我在我的项目中创建了一个自定义组件。该组件的 html 具有 Bootstrap 模式,我在其中显示一些文本,这些文本作为输入从 app 模块传递给该组件(属性名称为 testInput)。该组件的类型脚本具有用@Input 注解标记的属性名称。
在应用程序组件 html 文件中,我有这个自定义组件的两个实例,并且作为输入传递的值不同。当我运行这个项目时,自定义组件的 html(模式之外)中显示的值对于两个实例是不同的。但是,当单击按钮时,自定义组件的两个实例在模态窗口内显示的相同属性是相同的。请帮助解决问题。
app.component.html
<app-tesmodal [testInput] ="'anish'"></app-tesmodal>
<app-tesmodal [testInput] ="'anuj'"></app-tesmodal>
测试模态组件.ts
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-tesmodal',
templateUrl: './tesmodal.component.html',
styleUrls: ['./tesmodal.component.css']
})
export class TesmodalComponent implements OnInit {
@Input() testInput: string;
constructor() { }
ngOnInit() {
}
}
test-modal.component.html 的代码
{{testInput}}
<div class="container">
<h2>Modal Example</h2>
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>
<div class="modal" id="myModal" role="dialog">
<div class="modal-dialog">
<h4 class="modal-title">{{testInput}}</h4>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Modal Header </h4>
<h4 class="modal-title">{{test}}</h4>
</div>
<div class="modal-body">
<p>Some text in the modal.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
我期望模态内容对于两个不同的组件实例是不同的
解决方案
Angular 正确渲染了您的组件。如果您在 chrome 中检查您的 Angular 应用程序,您可以看到两个具有正确数据的不同模态组件。但是,这里的问题是您对两个模态使用相同的 id。
在您的 test-modal.component.html 文件中,您有一个data-target="#myModal"
代码。当 bootstrap 看到这段代码时,它被解释为 - 当这个按钮被点击时,显示 id = myModal 的模态框。如果只有一个模态,这将起作用。但在您的情况下,有两个 app-tesmodal 实例。这将创建两个具有相同 id myModal 的模态。因此,当您单击Open Modal按钮时,引导程序会查找 id = myModal 的第一个项目并将其打开。这就是为什么无论单击的按钮如何,您总是会获得相同的模式。
为了解决这个问题,您需要每个模式的唯一 ID。将Open Modal按钮代码替换为以下代码:
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" [attr.data-target]="'#myModal' + testInput">Open Modal</button>
将模态 div 打开标记替换为以下代码:
<div class="modal" [attr.id]="'myModal' + testInput" role="dialog">
现在,您正在根据传递给tesmodal组件的输入动态设置模态的 id。这可确保在单击按钮时触发正确的模式。
test-modal.component.html 的完整 html 代码如下:
{{testInput}}
<div class="container">
<h2>Modal Example</h2>
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" [attr.data-target]="'#myModal' + testInput">Open Modal</button>
<div class="modal" [attr.id]="'myModal' + testInput" role="dialog">
<div class="modal-dialog">
<h4 class="modal-title">{{testInput}}</h4>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Modal Header </h4>
<h4 class="modal-title">{{testInput}}</h4>
</div>
<div class="modal-body">
<p>Some text in the modal.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
推荐阅读
- asp.net-core - OpenIdConnect 与 .NET Core 2.2 MVC 使用 ScopePolicy 连接到 IdentityServer3。您如何将范围纳入用户主体?
- c - Declare dynamically sized array in global scope
- flask-sqlalchemy - ImportError:无法导入名称“create_app”
- node.js - How to handle socket connections in a docker-swarm environment
- postgresql - Make Relation for every tables
- python - How to send text to the Email field within https://accounts.google.com registration page?
- python - 在创建 VAE 模型时抛出异常“你应该实现一个 `call` 方法。”
- swift - Select multiple nodes while dragging
- visual-studio - How to enable the checkbox so that the project on xamarin can be compiled under Windows?
- python - How do I find shortest path in maze with BFS?