javascript - Angular' Bootstrap 下拉按钮大小

标签 javascript css angularjs twitter-bootstrap

我有一些要求迫使我将 angular bootstrap 下拉菜单的样式设置为 this。 : enter image description here

一切正常,除了我需要使按钮的文本响应。所以用户在下拉列表中选择的内容应该显示在按钮中。

如您所见,我在下拉列表的右上角有一个小三 Angular 形,当您选择一些宽度较短的选项时,它会导致问题。如下图

enter image description here

我的问题是有什么办法可以解决这个问题吗?例如,通过设置按钮等于我在下拉列表中的最大长度?或任何其他解决方案?

你可以在这里找到所有的代码:

http://plnkr.co/edit/zmDUjqdtPsql9GJjva4T?p=info

angular.module('ui.bootstrap.demo').directive('uibDropdownTemplate', ['$log',  function ($log) {
        return {
            restrict: 'EA',
            replace: true,
            scope: {
                defaultText: '@',
                options: '=',             
                selectedOption: '='
            },
            templateUrl: 'drop-down.html', 
            controller: function() {

            },            
            link: function (scope, element, attrs) {

                if (scope.selectedOption === undefined) {
                    scope.selectedOption = scope.defaultText;
                }

                scope.selectedChange = function(option,$event){ 
                    if(scope.selectedOption === option) {
                        scope.selectedOption = scope.defaultText                        
                        $($event.target).removeClass("option-selected");
                    }               
                    else
                    {
                        scope.selectedOption = option;     
                        $("ul.dropdown-menu>li>a").removeClass("option-selected");
                        $($event.target).addClass("option-selected");

                    }

                };
            }
        };
    }]);

最佳答案

如果不摆弄字体和 em 等,我只能在设置宽度方面想出一个快速而肮脏的解决方案。然而,一般概念是确定选项的最大长度,然后使用 ng-class 手动将 preCaretText 上的宽度设置为所需的宽度。在我的示例中,我将其设置为最大长度 x 7 像素,这在我的 Chrome 浏览器上看起来非常接近。

http://plnkr.co/edit/vK3DxLM7mNuKG0w2Q8jv?p=preview

drop-down.html

            <div class="preCaretText" ng-style="{'width': maxOptionLength * 7+ 'px'} ">{{selectedOption}}</div>

example.js

angular.module('ui.bootstrap.demo').directive('uibDropdownTemplate', ['$log',  function ($log) {
        return {
            restrict: 'EA',
            replace: true,
            scope: {
                defaultText: '@',
                options: '=',             
                selectedOption: '='
            },
            templateUrl: 'drop-down.html', 
            controller: function() {

            },            
            link: function (scope, element, attrs) {
                var maxOptionLength = Math.max.apply(Math, scope.options.map(function (el) { return el.length }));
                scope.maxOptionLength = maxOptionLength;

                if (scope.selectedOption === undefined) {
                    scope.selectedOption = scope.defaultText;
                }

                scope.selectedChange = function(option,$event){ 
                    if(scope.selectedOption === option) {
                        scope.selectedOption = scope.defaultText                        
                        $($event.target).removeClass("option-selected");
                    }               
                    else
                    {
                        scope.selectedOption = option;     
                        $("ul.dropdown-menu>li>a").removeClass("option-selected");
                        $($event.target).addClass("option-selected");

                    }

                };
            }
        };
    }]);

关于javascript - Angular' Bootstrap 下拉按钮大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34051028/

相关文章:

jquery - AJAX 仅使用 jQuery 填充最终的 JSON 对象?也使用了 Circliful jQuery 插件

jquery - AngularJS - Bootstrap Datepicker - 格式设置为 'mm-yyyy' 但允许用户以 'mm-yy' 格式输入日期

javascript - AngularJS 在循环内动态创建指令

angularjs - angular ui-router,html5模式总是刷新到/

javascript - 为什么使用 Switch 时需要 Break?

jquery - 如何使选定的 LI 保持可见(不隐藏)?

html - 我想让一个 div(包含文本)与文本字段在同一行

javascript - 使用 JavaScript 读取 HTML 表格

javascript - 如何在 TypeScript 中获取源代码中的实际行号(用于自定义日志记录)

javascript - 使用 jQuery Wan Spinner 插件的多个字段