javascript - ngIf 不适用于 Angular 组件内的 JavaScript 方法
问题描述
我的osmontagem.component.html中有这个 HTML ,这是代码:
<div class="card-filter">
<h5 class="card-title-content">Opções</h5>
<div class="row m--margin-bottom-20 card-content-custom">
<div class="btn-group mb-2 mr-2">
<button class="btn btn-outline-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Opções</button>
<div class="dropdown-menu">
<a class="dropdown-item pointer" (click)="storeOsPimData()">Cadastrar <i class="feather icon-plus-circle"></i></a>
<a class="dropdown-item pointer" (click)="showViewOsData('S')">Editar</a>
<a class="dropdown-item pointer" (click)="deleteOs()">Deletar</a>
</div>
</div>
<div class="btn-group mb-2 mr-2">
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Ações</button>
<div class="dropdown-menu">
<a class="dropdown-item pointer" (click)="showViewOsData('N')">Visualizar <i class="feather icon-plus-circle"></i></a>
<ng-container *ngIf="this.tableName === 'iniTb'">
<a class="dropdown-item pointer" (click)="executeOs()">Executar</a>
</ng-container>
<ng-container *ngIf="this.tableName === 'execTb'">
<a class="dropdown-item pointer">Finalizar</a>
<a class="dropdown-item pointer">Devolver</a>
</ng-container>
</div>
</div>
</div>
</div>
看看我的 *ngIf 当我使用此函数以 Angular 方式更改变量时它工作正常
public changeTbTemp(event) {
const elementId: string = (event.target as Element).id;
this.tableName = elementId;
}
但我不希望这样,我在我的组件中使用 dataTable 和 jquery 插件,并在我使用的 javascript 函数的最后一行:
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
if (e.target.id === 'iniTb') {
tabletemp = iniTb;
} else if (e.target.id === 'execTb') {
tabletemp = execTb;
} else if (e.target.id === 'finishTb') {
tabletemp = finishTb;
} else if (e.target.id === 'devoTb') {
tabletemp = devTb;
}
changeTempTable(e.target.id, tabletemp);
});
const changeTempTable = (tablenamedata, tabletempdata) => {
// this.tableName = tablenamedata;
// this.tempTable = tabletempdata;
this.changeTbTemp(tablenamedata, tabletempdata);
};
如果您看到该函数,您将看到我从元素中获取 ID 并从下拉菜单中更改选项,如果我使用 javascript 中的 function(),则无法从 typescript 中引用全局变量,所以我使用这个:
const changeTempTable = (tablenamedata, tabletempdata) => {
// this.tableName = tablenamedata;
// this.tempTable = tabletempdata;
this.changeTbTemp(tablenamedata, tabletempdata);
};
现在我可以从打字稿文件中获取变量或函数,即 osmontagem.component.ts 并且工作正常,如果你们从控制台看到这张图片,变量正在改变:
调试图像
但是当我改变这种方式不起作用但如果我使用 Angular 方式工作时,为什么?我需要使用 javascript 方式,因为里面有一些变量,我希望我的打字稿文件看到它。
这是我的方法中的第二张照片
解决方案
我设法让它工作,我不知道为什么,但这个功能来自引导程序
$('a[data-toggle="tab"]').on('shown.bs.pill', (e) => {}
$('a[data-toggle="tab"]').on('shown.bs.pill', (e) => {
if (e.target.id === 'iniTb') {
tabletemp = iniTb;
} else if (e.target.id === 'execTb') {
tabletemp = execTb;
} else if (e.target.id === 'finishTb') {
tabletemp = finishTb;
} else if (e.target.id === 'devoTb') {
tabletemp = devTb;
}
this.tableName = 'execTb';
});
当您想从组件文件更改全局变量时不起作用,我只是将函数更改为来自 jquery 的简单单击事件
$('.nav-link').click((e) => {
if (e.target.id === 'iniTb') {
tabletemp = iniTb;
} else if (e.target.id === 'execTb') {
tabletemp = execTb;
} else if (e.target.id === 'finishTb') {
tabletemp = finishTb;
} else if (e.target.id === 'devoTb') {
tabletemp = devTb;
}
this.tableName = e.target.id;
});
现在工作正常,如果有人有同样的问题,我会发布这个。
推荐阅读
- reactjs - 如何在加载后强制 Material UI Autocomplete 显示建议?
- r - R - 如何基于相关矩阵而不是原始数据运行回归?
- laravel - 无法将 laravel 版本从 6.20.8 升级到 7
- ios - AVPlayer addPeriodicTimeObserverForInterval:queue:usingBlock: 不会停止
- plotly - 如果 Atom 没有在文件夹中找到 .csv 文件,我该怎么办?
- python-3.x - 删除所有与用户相关的任务
- php - 如何使用 php 文件连接到 Android 上的 MediaPlayer
- sql - 当我们使用加法赋值 (+=) 时更新空值
- html - 视差效果:一个 div 在另一个 div 上?
- reactjs - 反应状态更新未定义并且不渲染