【发布时间】:2018-06-28 16:02:03
【问题描述】:
我有名为 tooltip 和 flow 的自定义属性,我可以像这样附加到任何元素:
<div tooltip="hello world" flow="top">StackOverflow</div>
是否可以通过例如将这些类添加到对象中。类似:ng-attr-tooltip 或者我将如何动态添加这些内容?
我尝试的另一种方法:
<div ng-class="{'tooltip='hello' : $ctrl.conditionalFunction(True)}">StackOverflow</div>
但我不确定如何仅使用 angularjs 来实现此结果。如果有人可以在这里为我指出正确的方向,那就太好了。 编辑:
我现在尝试过这样的事情,但没有结果:
[attr-tooltip="true ? 'You have to select an article to monitor' : null"]
谢谢。
:root {
--bg: #05a8ff;
--alt: #ad4375;
--text: #fff;
--opacity: 1;
--accent: #8fd1f2;
--shadow: rgba(0, 0, 0, 0.35);
--dink: 7px;
--ani: 150ms cubic-bezier(0.5, 0, 0.6, 1.3) 1ms forwards;
}
@keyframes tips-vert {
to {
opacity: var(--opacity);
transform: translate(-50%, 0);
}
}
@keyframes tips-horz {
to {
opacity: var(--opacity);
transform: translate(0, -50%);
}
}
@keyframes tips-diag-right {
to {
opacity: var(--opacity);
transform: translate(-1em, 0);
}
}
@keyframes tips-diag-left {
to {
opacity: var(--opacity);
transform: translate(1em, 0);
}
}
[tooltip] {
position: relative;
}
[tooltip]::before, [tooltip]::after {
text-transform: none;
line-height: 1;
font-size: .9em;
user-select: none;
pointer-events: none;
position: absolute;
display: none;
opacity: 0;
}
[tooltip]::before {
content: '';
border: var(--dink) solid transparent;
z-index: 1001;
}
[tooltip]::after {
content: attr(tooltip);
font-family: Helvetica, sans-serif;
text-align: center;
min-width: 3em;
max-width: 21em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding: 1ch 1.5ch;
border-radius: 0em;
padding:1em;
box-shadow: 0 1em 2em -0.5em var(--shadow);
background: var(--bg);
color: var(--text);
z-index: 1000;
}
[tooltip]:hover::before, [tooltip]:hover::after {
display: block;
}
[tooltip]:not([flow])::before,
[tooltip][flow^="up"]::before {
bottom: 100%;
border-bottom-width: 0;
border-top-color: var(--bg);
}
[tooltip]:not([flow])::after,
[tooltip][flow^="up"]::after {
bottom: calc(100% + var(--dink));
}
[tooltip]:not([flow])::before, [tooltip]:not([flow])::after,
[tooltip][flow^="up"]::before,
[tooltip][flow^="up"]::after {
left: 50%;
transform: translate(-50%, 0.5em);
}
[tooltip][flow^="down"]::before {
top: 100%;
border-top-width: 0;
border-bottom-color: var(--bg);
}
[tooltip][flow^="down"]::after {
top: calc(100% + var(--dink));
}
[tooltip][flow^="down"]::before, [tooltip][flow^="down"]::after {
left: 50%;
transform: translate(-50%, -0.5em);
}
[tooltip][flow$="-left"]::after {
right: 50%;
left: auto;
}
[tooltip][flow="up-left"]::after {
transform: translate(1.5em, 0.5em);
}
[tooltip][flow="down-left"]::after {
transform: translate(1.5em, -0.5em);
}
[tooltip][flow="up-right"]::after {
transform: translate(-1.5em, 0.5em);
}
[tooltip][flow="down-right"]::after {
transform: translate(-1.5em, -0.5em);
}
[tooltip][flow="left"]::before {
top: 50%;
border-right-width: 0;
border-left-color: var(--bg);
left: calc(0em - var(--dink));
transform: translate(0.5em, -50%);
}
[tooltip][flow="left"]::after {
top: 50%;
right: calc(100% + var(--dink));
transform: translate(0.5em, -50%);
}
[tooltip][flow="right"]::before {
top: 50%;
border-left-width: 0;
border-right-color: var(--bg);
right: calc(0em - var(--dink));
transform: translate(-0.5em, -50%);
}
[tooltip][flow="right"]::after {
top: 50%;
left: calc(100% + var(--dink));
transform: translate(-0.5em, -50%);
}
[tooltip]:not([flow]):hover::before, [tooltip]:not([flow]):hover::after,
[tooltip][flow^="up"]:hover::before,
[tooltip][flow^="up"]:hover::after,
[tooltip][flow^="down"]:hover::before,
[tooltip][flow^="down"]:hover::after {
animation: tips-vert var(--ani);
}
[tooltip][flow$="-right"]:hover::after {
animation: tips-diag-right var(--ani);
}
[tooltip][flow$="-left"]:hover::after {
animation: tips-diag-left var(--ani);
}
[tooltip][flow="left"]:hover::before, [tooltip][flow="left"]:hover::after,
[tooltip][flow="right"]:hover::before,
[tooltip][flow="right"]:hover::after {
animation: tips-horz var(--ani);
}
[tooltip='']::after, [tooltip='']::before {
display: none !important;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
<br>
<br>
<br>
<center>
<div tooltip="Hello World!" flow="up">
StackOverflow up
</div>
<div tooltip="Hello World!" flow="down">
StackOverflow down
</div>
</center>
https://jsfiddle.net/fdbq9jo6/5/
编辑:TL;DR 我基本上想set 根据另一个函数评估的工具提示的值。我查看了 stackoverflow,但我只发现帖子 getting 他们的自定义属性的值。
【问题讨论】:
-
可以的。您必须编写一个指令来将给定的字符串解析为对象,并在渲染之前通过该解析的对象生成所需的 dom 元素。
-
可以用指令来完成——这里是例子:stackoverflow.com/questions/24934127/…
-
@Roy 不,不同的是他们要检索值,我要设置它。
-
请在小提琴中添加您的角度代码,以便我可以为您更新它以实现所需的场景,作为@UtkuApaydin,您可以制作您的自定义指令来实现它
-
@HanyHabib 谢谢,我会添加它。
标签: angularjs