定位Angular UI引导程序Datepicker

abo*_*oni 21 datepicker angularjs angular-ui-bootstrap

我对angularjs ui datepicker有一个"小"问题.我需要以某种方式表明,如果带有datepicker附加的输入,应该显示输入左下角的弹出窗口(默认情况下)

在此输入图像描述

或者如果我想从输入的右下角代替它.这是因为在我创建的页面中,我的输入非常接近页面的右侧,当我附加日期选择器时,会发生这种情况(日期选择器被剪切,现在出现水平滚动):

在此输入图像描述

但问题是我需要两个位置的日期选择器(根据图像中的相关案例).

有人知道如何解决这个问题?我已经尝试left在datepicker弹出模板中更改内联属性,但它始终是固定值,我认为这不是真正的选择.

谢谢

lin*_*nge 22

https://github.com/angular-ui/bootstrap/issues/1012

丑陋的黑客:

<div class="hackyhack">
  <input datepicker-popup="...">
</div>
Run Code Online (Sandbox Code Playgroud)

魔术CSS:

.hackyhack {
  position: relative;
}
.hackyhack .dropdown-menu {
   left: auto !important;
   right: 0px;
 }
Run Code Online (Sandbox Code Playgroud)

  • 它根本不丑陋. (2认同)
  • 开玩笑?这太棒了!哈哈。拯救了我的一天 (2认同)

vin*_*esh 7

现在最新的angular-ui 1.2.0版本popup-placement在uib-datepicker-popup设置中有选项.

文档的快速摘要.

popup-placement(默认:自动左下角,配置:'placement') - 在放置之前传入由空格分隔的'auto'将启用自动定位,例如:"auto bottom-left".弹出窗口将尝试定位它最适合最近的可滚动祖先的位置.接受:

top - 弹出顶部,水平居中于input元素.

左上角 - 弹出顶部,左边缘与输入元素左边缘对齐.

右上角 - 弹出顶部,右边缘与输入元素右边缘对齐.

bottom - 底部弹出,水平居中于input元素.

左下角 - 底部弹出,左边缘与输入元素左边缘对齐.

右下角 - 弹出底部,右边缘与输入元素右边缘对齐.

left - 左侧弹出,垂直居中于input元素.

左上角 - 左侧弹出,上边缘与输入元素上边缘对齐.

左下角 - 左侧弹出,下边缘与输入元素底边对齐.

right - 右侧弹出,垂直居中于input元素.

右上角 - 右上角弹出,上边缘与输入元素上边缘对齐.

右下角 - 右侧弹出,底部边缘与输入元素底部边缘对齐.

在你的情况下,我认为bottom-right会奏效.

这个plunker了解更多细节.


小智 5

这个CSS解决方案可能比更改/破解你的角度.js文件更简单:

将你的日期选择器包装在div中,然后覆盖datepicker的.dropdown-menu类的边距CSS:

<div id="adjust-left">
   <your-datepicker-here/>
<div>
Run Code Online (Sandbox Code Playgroud)

然后,在CSS中:

#adjust-left .dropdown-menu{
    /* Original value: margin: 2px 0 0; */
    margin: 2px -Xpx; /* Where X is the amount of pixles to shift it left */
}
Run Code Online (Sandbox Code Playgroud)


bek*_*kos 2

如果你想实现一个通用的解决方案,这是仅仅通过改变datepicker-popup.

您必须更改updatePosition指令内的函数,以便 scope.position.left等于如下所示:

 scope.position.left += scope.position.width - $position.position(popupEl).width;
Run Code Online (Sandbox Code Playgroud)

但同样,您必须确保在 popuEl 宽度可见后“读取”它,否则您将得到零。此外,如果您进入另一种模式(月份或年份选择),尽管弹出宽度可能会改变,但位置不会更新。

我只是想说,这个功能不是一两行的改变,可能最好在 https://github.com/angular-ui/bootstrap/issues?state=open 中打开一个请求愿意进一步调查此事!

  • 嗨贝科斯。感谢您的回答。我已经打开了请求,看看是否有人愿意检查一下。到目前为止,我已经解决了我的问题,但有很多变化。我必须更改模板并从内联样式中删除 left 属性。我做的另一件事是将输入和日期选择器封装在 Div 中,并使用 CSS 和相对定位创建左对齐和右对齐的样式,并且在使用它的任何地方,我根据需要的对齐设置 CSS 类。 (2认同)
  • 我希望引导程序的人员考虑这个请求,因为解决方法只是处理这个问题的一种奇怪的方法。感谢您的帮助 ! (2认同)