我看到了一个非常好的AngularJS Bootstrap类型的Select指令示例:
http://jsfiddle.net/cojahmetov/3DS49/
这满足了我的大多数需求,但它使用jQuery,我们没有使用该库.
这个例子中使用的jQuery非常小,但我不知道如何替换看起来像这样的元素定位器:
任何人都可以给我任何关于如何替换它的指示:
switch (attrs.menuType) { case "button": $('button.button-label',element).html(item.name); break; default: $('a.dropdown-toggle',element).html('<b class="caret"></b> ' + item.name); break; }
这样它可以在没有jQuery的情况下工作吗?理想情况下,我希望有人知道可能会提出基于ui-bootstrap版本的版本.也许这甚至可能会被添加到ui-bootstrap以供其他人使用.
解决方法
那个小提琴的想法很好,但我发现实施有点混乱.那么一个人能做什么呢?好吧,当然,在ui-bootstrap之上写一个替代的下拉指令!
希望你觉得这很有帮助.它应该非常容易使用.
<dropdown is-button ng-model="vm.item" items="vm.items" callback="vm.callback(item)"> </dropdown>
所以你传入了包含初始选择的ng模型,如果有的话.从指令设置新值.在项目中,您可以选择id-name对的集合,如果需要,还可以使用回调函数.如果指定了is-button属性,您将获得一个按钮时尚的下拉控件.
然后控制器可能如下所示.
调节器
// Controller app.controller('Ctrl',function() { var vm = this; // items collection vm.items = [{ id: 0,name: 'London' },{ id: 1,name: 'Paris' },{ id: 2,name: 'Milan' }]; // current item vm.item = null; // vm.items[1]; // directive callback function vm.callback = function(item) { vm.fromCallback = 'User selected ' + angular.toJson(item); }; });
下拉指令的逻辑非常简单,真的.
指令javaScript
// Dropdown directive app.directive('dropdown',function() { return { restrict: 'E',require: '^ngModel',scope: { ngModel: '=',// selection items: '=',// items to select from callback: '&' // callback },link: function(scope,element,attrs) { element.on('click',function(event) { event.preventDefault(); }); scope.default = 'Please select item'; scope.isButton = 'isButton' in attrs; // selection changed handler scope.select = function(item) { scope.ngModel = item; if (scope.callback) { scope.callback({ item: item }); } }; },templateUrl: 'dropdown-template.html' }; });
指令HTML模板
<div class="btn-group" dropdown> <!-- button style dropdown --> <button ng-if="isButton" type="button" class="btn btn-primary" ng-bind="ngModel.name || default"> </button> <button ng-if="isButton" type="button" class="btn btn-primary dropdown-toggle" dropdown-toggle> <span class="caret"></span> </button> <!-- no button,plz --> <a ng-if="!isButton" class="dropdown-toggle" dropdown-toggle href ng-bind="ngModel.name || default"> </a> <span ng-if="!isButton" class="caret"></span> <!-- dropdown items --> <ul class="dropdown-menu" role="menu"> <li ng-repeat="item in items"> <a href="#" ng-bind="item.name" ng-click="select(item)"></a> </li> </ul> </div>
这是外观&感觉初步实施.除了您提供的示例之外,您还将获得整个对象而不仅仅是id.
相关的Plunker在这里http://plnkr.co/edit/bLWabx使用angularjs 1.4.0-beta.3和ui-bootstrap 0.12.0.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。