【发布时间】:2020-02-20 19:07:35
【问题描述】:
我有一个使用角度嵌套复选框的文件。我创建了一个组件并将以下代码放入 ngOnInit() 正文中
const mainUl = document.getElementById('siteDetail');
mainUl.classList.add('ulClassStyle');
const names = ['Laptops', 'TVs', 'Microphones'];
const secondLi = document.createElement('li');
secondLi.classList.add('liClassStyle');
const secondSpan = document.createElement('span');
secondSpan.classList.add('caret');
const secondMaincheckbox = document.createElement('input');
secondMaincheckbox.type = 'checkbox';
secondMaincheckbox.id = 'secondOption';
secondMaincheckbox.checked = true;
const secondMainlbl = document.createElement('label');
secondMainlbl.id = 'label';
secondMainlbl.htmlFor = 'secondOption';
secondMainlbl.classList.add('labelClassStyle');
secondMainlbl.appendChild(document.createTextNode('Electronics'));
secondSpan.appendChild(secondMainlbl);
secondLi.appendChild(secondMaincheckbox);
secondLi.appendChild(secondSpan);
const secondSubUl = document.createElement('ul');
secondSubUl.classList.add('ulClassStyle');
for (let i = 0; i < names.length; i++) {
const name = names[i];
const secondSubLi = document.createElement('li');
secondSubLi.classList.add('liClassStyle');
const secondSubCheckbox = document.createElement('input');
secondSubCheckbox.type = 'checkbox';
secondSubCheckbox.name = 'name' + i;
secondSubCheckbox.value = 'value';
secondSubCheckbox.id = 'secondSubCheckboxid' + i;
secondSubCheckbox.checked = true;
secondSubCheckbox.onclick = function() { secondMyfunction(this); };
secondSubCheckbox.classList.add('secondSubOption');
secondSubLi.appendChild(secondSubCheckbox);
secondSubLi.appendChild(document.createTextNode(name));
secondSubUl.appendChild(secondSubLi);
secondSubUl.classList.add('nested');
}
secondLi.appendChild(secondSubUl);
mainUl.appendChild(secondLi);
const secondCheckboxes = document.querySelectorAll('input.secondSubOption');
const secondCheckall = document.getElementById('secondOption');
secondCheckall.onclick = function() {
for (let i = 0; i < secondCheckboxes.length; i++) {
secondCheckboxes[i].checked = this.checked;
}
};
function secondMyfunction(checkBox) {
const secondCheckedCount = document.querySelectorAll('input.secondSubOption:checked').length;
secondCheckall.checked = secondCheckedCount > 0;
secondCheckall.indeterminate = secondCheckedCount > 0 && secondCheckedCount < secondCheckboxes.length;
}
const secondToggler = document.getElementsByClassName('caret');
for (let i = 0; i < secondToggler.length; i++) {
secondToggler[i].addEventListener('click', function() {
this.parentElement.querySelector('.nested').classList.toggle('active');
this.classList.toggle('caret-down');
});
}
然后我在 CSS 代码中写了这个:
body {
color: #555;
font-size: 1.25em;
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
hr {
margin: 50px 0;
}
.ulClassStyle
{
list-style: none;
}
.container {
margin: 40px auto;
max-width: 700px;
}
.liClassStyle {
margin-top: 1em;
}
.labelClassStyle {
font-weight: bold;
}
.nested {
display: none;
}
.caret {
cursor: pointer;
user-select: none;
}
.caret::before {
content: "\25B6";
color: black;
display: inline-block;
margin-right: 6px;
}
.caret-down::before {
transform: rotate(90deg);
}
.active {
display: block;
}
如果我将这个 CSS 代码放在主 css 文件中:style.css,它可以正常工作,没有任何问题。但是,如果我为组件添加 CSS,它就不起作用。知道为什么会这样吗?!
【问题讨论】:
-
向我们展示如何在组件中插入该 css 文件。也许那是问题
-
您应该阅读角度渲染器并使用它。按照您的方式进行操作不是一个好习惯。
-
我发现了一件有趣的事情:如果这些项目是静态项目,那么代码将应用于它们。但是,如果这些项目是在运行时添加的,则代码不会应用于它们。是这样的吗?!
-
我认为@Component 中的这个styleUrls 有一些问题。如果要访问其中的 scss 变量。您最终可能会在每个组件中添加 css 依赖项。而且,如果您想在组件位于另一个组件中时添加特殊规则,则无论如何都需要以全局样式执行此操作。最后,我更喜欢将所有内容都放在样式文件夹中:medium.com/@osternaud_clem/…
标签: css angular angular-components