मेरे पास एक AngularJS निर्देश है जो निम्नलिखित टेम्पलेट में संस्थाओं के संग्रह को प्रस्तुत करता है:
<table class="table">
<thead>
<tr>
<th><input type="checkbox" ng-click="selectAll()"></th>
<th>Title</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="e in entities">
<td><input type="checkbox" name="selected" ng-click="updateSelection($event, e.id)"></td>
<td>{{e.title}}</td>
</tr>
</tbody>
</table>
जैसा कि आप देख सकते हैं, यह वह जगह है <table>जहाँ प्रत्येक पंक्ति को अपने स्वयं के चेकबॉक्स के साथ व्यक्तिगत रूप से चुना जा सकता है, या सभी पंक्तियों को एक बार में स्थित मास्टर चेकबॉक्स के साथ चुना जा सकता है <thead>। बहुत बढ़िया यूआई।
सबसे अच्छा तरीका क्या है:
- एक पंक्ति का चयन करें (यानी जब चेकबॉक्स की जाँच की जाती है, तो चयनित इकाई की आईडी को आंतरिक सरणी में जोड़ें, और
<tr>अपने चयनित राज्य को प्रतिबिंबित करने के लिए इकाई वाले CSS वर्ग को जोड़ें )? - एक बार में सभी पंक्तियों का चयन करें? (यानी सभी पंक्तियों के लिए पहले से वर्णित क्रियाएँ करें
<table>)
मेरा वर्तमान कार्यान्वयन मेरे निर्देशन में एक कस्टम नियंत्रक जोड़ना है:
controller: function($scope) {
// Array of currently selected IDs.
var selected = $scope.selected = [];
// Update the selection when a checkbox is clicked.
$scope.updateSelection = function($event, id) {
var checkbox = $event.target;
var action = (checkbox.checked ? 'add' : 'remove');
if (action == 'add' & selected.indexOf(id) == -1) selected.push(id);
if (action == 'remove' && selected.indexOf(id) != -1) selected.splice(selected.indexOf(id), 1);
// Highlight selected row. HOW??
// $(checkbox).parents('tr').addClass('selected_row', checkbox.checked);
};
// Check (or uncheck) all checkboxes.
$scope.selectAll = function() {
// Iterate on all checkboxes and call updateSelection() on them??
};
}
विशेष रूप से, मुझे आश्चर्य है:
- क्या ऊपर दिया गया कोड किसी कंट्रोलर का है या इसे किसी
linkफंक्शन में जाना चाहिए ? - यह देखते हुए कि jQuery आवश्यक रूप से मौजूद नहीं है (AngularJS को इसकी आवश्यकता नहीं है), DOM ट्रैवर्सल करने का सबसे अच्छा तरीका क्या है? JQuery के बिना, मुझे
<tr>एक दिए गए चेकबॉक्स के माता-पिता का चयन करने, या टेम्पलेट में सभी चेकबॉक्स का चयन करने में मुश्किल समय आ रहा है । - पासिंग
$eventके लिएupdateSelection()बहुत ही सुंदर प्रतीत नहीं होता। क्या केवल क्लिक किए गए तत्व के राज्य (चेक / अनियंत्रित) को पुनः प्राप्त करने का एक बेहतर तरीका नहीं है?
धन्यवाद।
ngCheckedनिर्देश के बारे में सीखा है । (मेरा एकमात्र खेद यह है कि हम इस कोड को थोड़ा कम नहीं कर सकते हैं।)