2014-10-15 24 views
48

Bất cứ ai cũng biết cách xóa giá trị đã chọn của hộp ui-chọn trong góc?Xóa tùy chọn đã chọn trong ui-chọn góc

Tôi muốn chức năng của select2 mà bạn có x nhỏ trong hộp chọn. Không giống như nó có phương pháp cho phép rõ ràng mà select2 nhận được.

Trả lời

90

Có một tùy chọn allow-clear cho ui-select-trận đấu mà không được điều cho bạn, bạn sẽ có x bên phải và bạn có thể xóa nó bằng cách nhấp vào nó. https://github.com/angular-ui/ui-select/wiki/ui-select-match

dụ nhanh:

<ui-select-match allow-clear="true" placeholder="Select or search a country in the list..."> 
    <span>{{$select.selected.name}}</span> 
</ui-select-match> 

dụ làm việc: http://plnkr.co/edit/DbbUE68QlNLjx97pBZ56?p=preview

+9

Đây phải là câu trả lời được chấp nhận. –

+2

Bạn có biết làm cách nào để có được sự kiện đó bằng cách nhấp vào nút cho phép xóa 'x' không? Nó sẽ giúp tôi thiết lập lại các trường phụ thuộc –

+0

Trong khi điều này là rõ ràng trong tài liệu, nó khá khó chịu mà bạn chỉ có thể sử dụng một boolean nhưng không gọi lại cho các tùy chọn cho phép rõ ràng ... Vì vậy, điều này là khá nhiều useless để bắn một cuộc gọi lại và làm điều gì đó với dữ liệu liên quan. – burzum

29

Bạn có thể thêm một nút X nhỏ khi bạn hiển thị lựa chọn.

<ui-select-match placeholder="Select or search a country in the list..."> 
    <span>{{$select.selected.name}}</span> 
    <button class="clear" ng-click="clear($event)">X</button> 
</ui-select-match> 

Sau đó, bạn dừng sự kiện nhấp chuột đó để sủi bọt và kích hoạt sự kiện mở. Và bạn xóa trường bằng cách ghi đè lên mô hình đã chọn.

$scope.clear = function($event) { 
    $event.stopPropagation(); 
    $scope.country.selected = undefined; 
}; 

Đây là plnkr. http://plnkr.co/edit/qY7MbR

+1

@ giải pháp exiadbq của cung cấp các tính năng tương tự trong một cách đơn giản hơn. – Jocelyn

+3

Vâng, hoạt động-- tuy nhiên, tôi chỉ muốn thêm vào, bây giờ có một hàm dựng sẵn, do đó bạn không cần phải thêm một phương thức bổ sung vào bộ điều khiển. Bạn chỉ có thể sử dụng 'ng-click =" $ select.clear ($ event) "' và nó sẽ hoạt động tốt;) Điều này cũng đi qua việc cập nhật hiển thị và gọi lại. –

6

Nếu bạn đang sử dụng bootstrap, từ quan điểm thiết kế, bạn cũng có thể sử dụng biểu tượng fa-remove.

Ngoài ra, từ góc độ khả năng sử dụng, bạn có thể muốn căn chỉnh biểu tượng xóa ở bên trái.

Các JS:

<ui-select-match placeholder="Select or find..."> 
    <button class="clear-btn" ng-click="clear($event)"> 
     <span class="fa fa-remove"></span> 
    </button> 
    <span class="clear-btn-offset">{{$select.selected}}</span> 
</ui-select-match> 

CSS:

.select2 .clear-btn { 
    background: none; 
    border: none; 
    cursor: pointer; 
    padding: 5px 10px; 
    position: absolute; 
    left: -2px; 
    top: 1px; 
} 

.clear-btn-offset { 
    position: absolute; 
    left: 25px; 
} 

Mở mã chỉ thị:

$scope.clear = function($event) { 
    $event.stopPropagation(); 
    // Replace the following line with the proper variable 
    $scope.country.selected = undefined; 
}; 
+0

Đây là một giải pháp thực sự tốt đẹp Igor. Cảm ơn nhiều. Cách này trông đẹp hơn cái được Nic128 đề xuất. Tôi chỉ thay đổi CSS trên '.select2 .clear-btn' vì tôi muốn xem ** X ** ở bên phải và tôi đã thay thế' left: -2px; 'cho' right: 20px; '. Tôi không cần phải sử dụng '.rõ ràng btn-offset' ở tất cả. – sebadagostino

+0

Tất nhiên bạn vẫn có thể sử dụng những gì @exiadbq đã đề cập, nhưng cá nhân tôi không vì cấu trúc phần tử và kiểu trực quan thực sự tốt hơn với nút rõ ràng. –

0

Lưu ý: nếu chúng ta sử dụng gắn thẻ và gắn thẻ-label = "false" trong trường hợp đó cho phép rõ ràng chức năng không hoạt động.

chức năng chỉnh rõ ràng

HTML Mã

<ui-select-match placeholder=”Enter table…”> 
<span>{{$select.selected.description || $select.search}}</span> 
<a class=”btn btn-xs btn-link pull-right” ng-click=”clear($event, $select)”><i class=”glyphicon glyphicon-remove”></i></a> 
</ui-select-match> 

điều khiển Mã hành động

function clear($event, $select){ 
//stops click event bubbling 
$event.stopPropagation(); 
//to allow empty field, in order to force a selection remove the following line 
$select.selected = undefined; 
//reset search query 
$select.search = undefined; 
//focus and open dropdown 
$select.activate(); 
} 
Các vấn đề liên quan