javascript - 创建元素后添加css
问题描述
我想在创建它们后直接向使用 angularJS 创建的元素添加一些图标。所以我在创建元素的同时调用该函数来设置图标。
data-ng-click="opeTab($event); getObjects($event); loadObj($event); setIcons();"
问题是,我可以通过以下方式获取元素:
$scope.setIcons = function(){
var tbs = document.getElementsByClassName("tabTr");
for(let i = 0; i < tbs.length; i++){
console.log(i);
tbs[i].style.backgroundImage = "url('../ICONS\Icons_24\'" + tbs[i].id + "')";
}
}
并且控制台中的列表已填充,但数组的长度为0。那么除了设置超时之外,我还有什么可能“等待”创建?
解决方案
您应该尽量避免自己从控制器中创建元素。也许您有充分的理由这样做,但是从您给出的示例中我看不到这一点。
在您的模板中的某处,您应该有一个 ng-repeat 来呈现您的选项卡。每个选项卡都应该有一个ng-style。让我们说:
// template.html
<div class="tabs" ng-repeat="tab in tabs">
<div
class="tab"
ng-style="getBackgroundImageStyle(tab.id)">
tab {{ tab.id }}
</div>
</div>
// controller.js
$scope.tabs = [];
$scope.getBackgroundImageStyle = tabId => `{
'background-image': 'url('../ICONS/Icons_24/${tabId}')'
}`
$scope.openTab = () => {
$scope.tabs.push(new Tab(nextTabId)); // or however you create your tabs
}
如果您有充分的理由像这样直接访问 dom,那么使用延迟为 0 的$timeout并将您的 dom 修改包装在其中没有问题。一切都应该在 $timeout 中的代码运行之前渲染。
推荐阅读
- php - 关于使用 Message media API(AEST 编号)发送 SMS
- android - 更新 SDK:无法解决:com.android.support:appcompat-v7
- php - 如何将此 SQL 查询转换为 Codeigniter Active Record?
- javascript - JavaScript Firefox 自动将字符串转换为 NaN
- selenium - 打开浏览器后无法在边缘执行活动
- jquery - 如何使用 $.each 将 jquery 响应数据放入模态
- python - 图像未显示在 Excel 单元格中(python 和 openpyxl)
- batch-file - 与空格进行比较时,批处理 IF 语句给出语法错误
- c# - C# - 在主函数中使用异步
- segue - Swift4 Xcode9通过segue在ViewControllers之间传递变量