मैं AngularJS के साथ चेकबॉक्स मानों की सूची में कैसे बाँध सकता हूँ?


670

मेरे पास कुछ चेकबॉक्स हैं:

<input type='checkbox' value="apple" checked>
<input type='checkbox' value="orange">
<input type='checkbox' value="pear" checked>
<input type='checkbox' value="naartjie">

यह कि मैं अपने नियंत्रक में एक सूची में बाँधना चाहूँगा जैसे कि जब भी कोई चेकबॉक्स बदला जाता है तो नियंत्रक सभी जाँच मूल्यों की सूची रखता है, उदाहरण के लिए ['apple', 'pear'],।

एनजी-मॉडल केवल एक ही चेकबॉक्स के मूल्य को नियंत्रक में एक चर में बांधने में सक्षम लगता है।

क्या ऐसा करने का एक और तरीका है ताकि मैं चार चेकबॉक्स को नियंत्रक की सूची में बाँध सकूं?


23
क्या यह एक सूची है? क्या कोई वस्तु काम <input type='checkbox' ng-model="checkboxes.apple">करेगी ?: , आदि मॉडल होगा: {"सेब": सच, "नारंगी": असत्य, "नाशपाती": सच्चा, "नर्तजी": सच्चा}
मार्क राजकॉक


1
स्वीकृत उत्तर के अतीत को देखना सुनिश्चित करें। नहीं है एक और जवाब जो मेरी राय में है, और अधिक सुरुचिपूर्ण।
जेसन स्विट

3
naartjie!? कि बस तुम दूर फोड़ा देता है! : डी
पिओटर कुला

1
@ppumkin हेहे बस यह देखा। आप सही हैं: D
निकॉनलाइन

जवाबों:


927

इस समस्या से निपटने के दो तरीके हैं। या तो एक साधारण सरणी या वस्तुओं की एक सरणी का उपयोग करें। प्रत्येक समाधान में इसके पक्ष और विपक्ष हैं। नीचे आपको प्रत्येक मामले के लिए एक मिलेगा।


इनपुट डेटा के रूप में एक साधारण सरणी के साथ

HTML जैसा दिख सकता है:

<label ng-repeat="fruitName in fruits">
  <input
    type="checkbox"
    name="selectedFruits[]"
    value="{{fruitName}}"
    ng-checked="selection.indexOf(fruitName) > -1"
    ng-click="toggleSelection(fruitName)"
  > {{fruitName}}
</label>

और उपयुक्त नियंत्रक कोड होगा:

app.controller('SimpleArrayCtrl', ['$scope', function SimpleArrayCtrl($scope) {

  // Fruits
  $scope.fruits = ['apple', 'orange', 'pear', 'naartjie'];

  // Selected fruits
  $scope.selection = ['apple', 'pear'];

  // Toggle selection for a given fruit by name
  $scope.toggleSelection = function toggleSelection(fruitName) {
    var idx = $scope.selection.indexOf(fruitName);

    // Is currently selected
    if (idx > -1) {
      $scope.selection.splice(idx, 1);
    }

    // Is newly selected
    else {
      $scope.selection.push(fruitName);
    }
  };
}]);

पेशेवरों : नाम से सरल डेटा संरचना और टॉगल करना आसान है

विपक्ष : जोड़ें / निकालें दो सूचियों के रूप में बोझिल है (इनपुट और चयन) को प्रबंधित करना होगा


इनपुट डेटा के रूप में ऑब्जेक्ट एरे के साथ

HTML जैसा दिख सकता है:

<label ng-repeat="fruit in fruits">
  <!--
    - Use `value="{{fruit.name}}"` to give the input a real value, in case the form gets submitted
      traditionally

    - Use `ng-checked="fruit.selected"` to have the checkbox checked based on some angular expression
      (no two-way-data-binding)

    - Use `ng-model="fruit.selected"` to utilize two-way-data-binding. Note that `.selected`
      is arbitrary. The property name could be anything and will be created on the object if not present.
  -->
  <input
    type="checkbox"
    name="selectedFruits[]"
    value="{{fruit.name}}"
    ng-model="fruit.selected"
  > {{fruit.name}}
</label>

और उपयुक्त नियंत्रक कोड होगा:

app.controller('ObjectArrayCtrl', ['$scope', 'filterFilter', function ObjectArrayCtrl($scope, filterFilter) {

  // Fruits
  $scope.fruits = [
    { name: 'apple',    selected: true },
    { name: 'orange',   selected: false },
    { name: 'pear',     selected: true },
    { name: 'naartjie', selected: false }
  ];

  // Selected fruits
  $scope.selection = [];

  // Helper method to get selected fruits
  $scope.selectedFruits = function selectedFruits() {
    return filterFilter($scope.fruits, { selected: true });
  };

  // Watch fruits for changes
  $scope.$watch('fruits|filter:{selected:true}', function (nv) {
    $scope.selection = nv.map(function (fruit) {
      return fruit.name;
    });
  }, true);
}]);

पेशेवरों : जोड़ें / निकालें बहुत आसान है

विपक्ष : नाम से थोड़ा अधिक जटिल डेटा संरचना और टॉगल करना बोझिल है या इसके लिए एक सहायक विधि की आवश्यकता होती है


डेमो : http://jsbin.com/ImAqUC/1/


10
FYI करें, $ फ़िल्टर को इंजेक्ट करने के बजाय, आप फ़िल्टरफ़िल्टर को इंजेक्ट कर सकते हैं, और फिर निम्नानुसार उपयोग कर सकते हैं: फ़िल्टरफ़िल्टर ($ स्कोप.ऑफ़र्स, {चेक किया गया: सही}); बिल्ट-इन और कस्टम फ़िल्टर नाम फ़िल्टर के साथ $ इंजेक्टर के साथ पंजीकृत होते हैं NameNameFilter ("फ़िल्टरनाम इटैलिक्स में होना चाहिए") - $ फ़िल्टरप्रॉइडर डॉक्स
मार्क राजकॉक

24
value="{{fruit.name}}"और ng-checked="fruit.checked"सुपरफ्लस हैं, क्योंकि एनजी-मॉडल का उपयोग किया जाता है।
मार्क राजकोक

3
मैंने देखा कि मॉडल में "चेक" को निर्दिष्ट करने की कोई आवश्यकता नहीं है, कोणीय संपत्ति को स्वचालित रूप से सेट करेगा :)
daveoncode

3
एनजी-क्लिक के बजाय एनजी-परिवर्तन का उपयोग करना चाहिए क्योंकि यह किनारे के मामलों से बेहतर तरीके से निपटता है।
amccausl

2
@ViktorMolokostov यह सिर्फ उपयोगी होगा, यदि आप पारंपरिक रूप से फॉर्म जमा करना चाहते थे । मतलब इसे एक्शन हैंडलर (कुछ सर्वर साइड स्क्रिप्ट) में पोस्ट करना। Php के साथ, एक फॉर्म एलिमेंट जैसे कि नाम (वर्ग कोष्ठक का उपयोग करके) अनुरोध डेटा में एक सरणी बनाता है। इस तरह आप आसानी से चयनित फलों को संभाल सकते हैं।
योशी

406

एक सरल उपाय:

<div ng-controller="MainCtrl">
  <label ng-repeat="(color,enabled) in colors">
      <input type="checkbox" ng-model="colors[color]" /> {{color}} 
  </label>
  <p>colors: {{colors}}</p>
</div>

<script>
  var app = angular.module('plunker', []);

  app.controller('MainCtrl', function($scope){
      $scope.colors = {Blue: true, Orange: true};
  });
</script>

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


57
@kolypto - यह निश्चित रूप से जवाब है। मैं इसे उन लोगों (मेरे जैसे) के लिए फिर से लिखता हूं जो वस्तुओं के साथ काम कर रहे हैं: plnkr.co/edit/cqsADe 20,000KegsBMgWMyB8
Kyle

5
मैं इसे वैसे ही करता हूं जैसे आप करते हैं, लेकिन सक्षम क्या करता (color,enabled) in colorsहै?
सेबेस्टियन

3
@ सेबैस्टियन, चूंकि colorsएक वस्तु है, जब आप इसे पुनरावृत्त करते हैं - आपको जोड़े मिलते हैं (key,value)
कोलाप्टो

10
हालाँकि मुझे यह जवाब बहुत पसंद है! मुझे लगता है, डेटा स्रोत के रूप में वस्तुओं का उपयोग करने के साथ एक बड़ी समस्या है। यह है, क्योंकि परिभाषा के अनुसार वस्तुओं के गुणों का क्रम अपरिभाषित है, चेकबॉक्स प्रदर्शित करते समय कोई निश्चित आदेश प्रदान नहीं कर सकता है। अभी भी +1;)
योशी

2
colorsनाम दिया जाना चाहिए isSelected, यह पढ़ने में बहुत आसान isSelected[color]हैcolors[color]
दिमित्री ज़ैतसेव

86
<input type='checkbox' ng-repeat="fruit in fruits"
  ng-checked="checkedFruits.indexOf(fruit) != -1" ng-click="toggleCheck(fruit)">

function SomeCtrl ($scope) {
    $scope.fruits = ["apple, orange, pear, naartjie"];
    $scope.checkedFruits = [];
    $scope.toggleCheck = function (fruit) {
        if ($scope.checkedFruits.indexOf(fruit) === -1) {
            $scope.checkedFruits.push(fruit);
        } else {
            $scope.checkedFruits.splice($scope.checkedFruits.indexOf(fruit), 1);
        }
    };
}

2
प्यार करें कि यह कितना सरल है, वास्तव में मैं जो खोज रहा हूं (हालांकि मुझे यह स्वीकार करना होगा कि @vitalets निर्देश आश्चर्यजनक है)। मैंने इस फिडेल को बनाने के लिए उमुर के कोड को थोड़ा संशोधित किया है: jsfiddle.net/samurai_jane/9mwsbfuc
samurai_jane

मैं समुराई जेन खान की बातें करता हूं! कितना आसान था, बस वही दिखाना जो मुझे चाहिए था! :)
फ्रांसिस रोड्रिग्स

81

यहाँ एक त्वरित थोड़ा पुन: प्रयोज्य निर्देश है जो आपको लगता है कि आप क्या करना चाहते हैं। मैंने बस फोन किया है checkList। यह चेकबॉक्स बदलने पर सरणी को अपडेट करता है, और सरणी बदलने पर चेकबॉक्स को अपडेट करता है।

app.directive('checkList', function() {
  return {
    scope: {
      list: '=checkList',
      value: '@'
    },
    link: function(scope, elem, attrs) {
      var handler = function(setup) {
        var checked = elem.prop('checked');
        var index = scope.list.indexOf(scope.value);

        if (checked && index == -1) {
          if (setup) elem.prop('checked', false);
          else scope.list.push(scope.value);
        } else if (!checked && index != -1) {
          if (setup) elem.prop('checked', true);
          else scope.list.splice(index, 1);
        }
      };

      var setupHandler = handler.bind(null, true);
      var changeHandler = handler.bind(null, false);

      elem.bind('change', function() {
        scope.$apply(changeHandler);
      });
      scope.$watch('list', setupHandler, true);
    }
  };
});

यहां एक नियंत्रक और एक दृश्य है जो दिखाता है कि आप इसका उपयोग करने के बारे में कैसे जा सकते हैं।

<div ng-app="myApp" ng-controller='MainController'>
  <span ng-repeat="fruit in fruits">
    <input type='checkbox' value="{{fruit}}" check-list='checked_fruits'> {{fruit}}<br />
  </span>

  <div>The following fruits are checked: {{checked_fruits | json}}</div>

  <div>Add fruit to the array manually:
    <button ng-repeat="fruit in fruits" ng-click='addFruit(fruit)'>{{fruit}}</button>
  </div>
</div>
app.controller('MainController', function($scope) {
  $scope.fruits = ['apple', 'orange', 'pear', 'naartjie'];
  $scope.checked_fruits = ['apple', 'pear'];
  $scope.addFruit = function(fruit) {
    if ($scope.checked_fruits.indexOf(fruit) != -1) return;
    $scope.checked_fruits.push(fruit);
  };
});

(बटन प्रदर्शित करते हैं कि सरणी बदलने से चेकबॉक्स भी अपडेट हो जाएंगे।)

अंत में, यहाँ प्लंकर पर कार्रवाई में निर्देश का एक उदाहरण है: http://plnkr.co/edit/3YNLsyoG4PIBW6Kj7dRK?p=preview


2
धन्यवाद ब्रैंडन, यह वास्तव में वही हुआ जो मैं चाहता था (और वास्तव में जो सवाल भी पूछा गया था, अन्य उत्तरों के विपरीत)। मैंने जो एकमात्र ट्विक किया, वह था कि आपका "एलएम.ओन ('चेंज), फंक्शन () ..." टू "एलएम.बिंड (' चेंज ', फंक्शन) () ..." ताकि jQuery पर निर्भरता को दूर किया जा सके ।
जोनाथन मोफैट

यह बहुत साफ-सुथरा है, लेकिन किसी तरह एनजी-अक्षम का उपयोग करने की मेरी क्षमता को नष्ट कर देता है :( क्या मैं इसे ठीक कर सकता हूं?
निकोलस डैम लार्सन

सुपर उपयोगी! और यहां तक ​​कि स्रोत सूची और डेटा सूची दोनों के लिए सरणियों के बजाय मेरे साथ काम किया!
स्टीवशॉफ़र

मैं सभी से सहमत हूं। यह एक सबसे उपयोगी और निस्संदेह पुन: प्रयोज्य है !! इस अच्छे काम के लिए धन्यवाद। :)
maksbd19

2
अगर आपको AngularJS> = 1.4.4 से समस्या हो रही है, तो github.com/angular/angular.js/issues/13037 चेक करें : इसके स्थान value: '@'परvalue: '=ngValue'
tanguy_k

66

इस सूत्र में उत्तर के आधार पर मैंने चेकलिस्ट-मॉडल निर्देश बनाया है जो सभी मामलों को कवर करता है:

  • आदिमों की सरल सरणी
  • ऑब्जेक्ट्स का सरणी (आईडी या संपूर्ण ऑब्जेक्ट चुनें)
  • वस्तु गुण पुनरावृति

विषय-स्टार्टर मामले के लिए यह होगा:

<label ng-repeat="fruit in ['apple', 'orange', 'pear', 'naartjie']">
    <input type="checkbox" checklist-model="selectedFruits" checklist-value="fruit"> {{fruit}}
</label>

ऐसा लगता है कि मुझे क्या चाहिए। क्या कोई मौका है जो आप बता सकते हैं कि एसिंक्रोनस रूप से डेटा प्राप्त करते समय इसका उपयोग कैसे करें? वह हिस्सा मुझे भ्रमित कर रहा है।
डैन कैंक्रो

आपके द्वारा एसिंक्रोनस रूप से डेटा प्राप्त करने के बाद, उपर्युक्त उदाहरण में केवल स्कोलिस्ट मॉडल को दायरे में संशोधित करें selectedFruits
एड्रियन बेर

11

$indexचयनित मानों के हैशमैप का उपयोग करने के लिए स्ट्रिंग का उपयोग कर सकते हैं:

<ul>
    <li ng-repeat="someItem in someArray">
        <input type="checkbox" ng-model="someObject[$index.toString()]" />
    </li>
</ul>

इस तरह एनजी-मॉडल ऑब्जेक्ट इंडेक्स का प्रतिनिधित्व करने वाली कुंजी के साथ अपडेट हो जाता है।

$scope.someObject = {};

थोड़ी देर के बाद $scope.someObjectकुछ इस तरह दिखना चाहिए:

$scope.someObject = {
     0: true,
     4: false,
     1: true
};

यह विधि सभी स्थितियों के लिए काम नहीं करेगी, लेकिन इसे लागू करना आसान है।


यह एक बहुत ही सुंदर समाधान है और मेरे मामले में फिट बैठता है (AJAX का उपयोग करके)
Stephan Ryer

चुंबन विधि का उपयोग करता
Geomorillo

8

चूँकि आपने एक उत्तर दिया जिसमें एक सूची का उपयोग नहीं किया गया था, इसलिए मैं अपने टिप्पणी के प्रश्न का उत्तर मानूँगा "नहीं, यह एक सूची नहीं है"। मुझे यह भी आभास था कि शायद आप HTML सर्वर की ओर बढ़ रहे थे, क्योंकि आपके सैंपल HTML में "जाँच" मौजूद है (यदि आपके मॉडल को चेकबॉक्स बनाने के लिए एनजी-मॉडल का उपयोग किया गया था तो इसकी आवश्यकता नहीं होगी)।

वैसे भी, जब मैंने सवाल पूछा तो यहाँ मेरे मन में क्या था, यह मानते हुए कि आप HTML सर्वर-साइड जनरेट कर रहे थे:

<div ng-controller="MyCtrl" 
 ng-init="checkboxes = {apple: true, orange: false, pear: true, naartjie: false}">
    <input type="checkbox" ng-model="checkboxes.apple">apple
    <input type="checkbox" ng-model="checkboxes.orange">orange
    <input type="checkbox" ng-model="checkboxes.pear">pear
    <input type="checkbox" ng-model="checkboxes.naartjie">naartjie
    <br>{{checkboxes}}
</div>

एनजी-इनिट सर्वर-साइड जेनरेट किए गए HTML को शुरू में कुछ चेकबॉक्स सेट करने की अनुमति देता है।

फील करना


8

मुझे लगता है कि निर्दिष्ट 'एकाधिक' के साथ 'चयन' का उपयोग करना सबसे आसान समाधान होगा:

<select ng-model="selectedfruit" multiple ng-options="v for v in fruit"></select>

अन्यथा, मुझे लगता है कि आपको सूची बनाने के लिए सूची को संसाधित करना होगा ( $watch()चेक बॉक्स के साथ मॉडल सरणी बाइंड द्वारा )।


3
वह एक चेकबॉक्स सूची के लिए पूछ रहा है, और फिर भी आप उसे विकल्पों के साथ चयन के बारे में बता रहे हैं। जो पूरी तरह से अलग है।
क्रेजीसाबथ

@CrazySabbath: अभी तक आप यह नहीं समझ रहे हैं कि वह एक वैकल्पिक समाधान का सुझाव दे रहा है और इस जवाब ने 6 अन्य लोगों को "वैकल्पिक समाधान" के रूप में मदद की
जिज्ञासु बोले

5

मैंने जटिल वस्तुओं (तारों के बजाय) से निपटने के लिए योशी के स्वीकृत उत्तर को अनुकूलित किया है।

एचटीएमएल

<div ng-controller="TestController">
    <p ng-repeat="permission in allPermissions">
        <input type="checkbox" ng-checked="selectedPermissions.containsObjectWithProperty('id', permission.id)" ng-click="toggleSelection(permission)" />
        {{permission.name}}
    </p>

    <hr />

    <p>allPermissions: | <span ng-repeat="permission in allPermissions">{{permission.name}} | </span></p>
    <p>selectedPermissions: | <span ng-repeat="permission in selectedPermissions">{{permission.name}} | </span></p>
</div>

जावास्क्रिप्ट

Array.prototype.indexOfObjectWithProperty = function(propertyName, propertyValue)
{
    for (var i = 0, len = this.length; i < len; i++) {
        if (this[i][propertyName] === propertyValue) return i;
    }

    return -1;
};


Array.prototype.containsObjectWithProperty = function(propertyName, propertyValue)
{
    return this.indexOfObjectWithProperty(propertyName, propertyValue) != -1;
};


function TestController($scope)
{
    $scope.allPermissions = [
    { "id" : 1, "name" : "ROLE_USER" },
    { "id" : 2, "name" : "ROLE_ADMIN" },
    { "id" : 3, "name" : "ROLE_READ" },
    { "id" : 4, "name" : "ROLE_WRITE" } ];

    $scope.selectedPermissions = [
    { "id" : 1, "name" : "ROLE_USER" },
    { "id" : 3, "name" : "ROLE_READ" } ];

    $scope.toggleSelection = function toggleSelection(permission) {
        var index = $scope.selectedPermissions.indexOfObjectWithProperty('id', permission.id);

        if (index > -1) {
            $scope.selectedPermissions.splice(index, 1);
        } else {
            $scope.selectedPermissions.push(permission);
        }
    };
}

काम करने का उदाहरण: http://jsfiddle.net/tCU8v/


1
आपको कभी भी <input type="checkbox">एक लपेटने या मिलान के बिना नहीं होना चाहिए <label>! अब आपके उपयोगकर्ताओं को चेकबॉक्स के बगल में पाठ के बजाय वास्तविक चेकबॉक्स पर क्लिक करना होगा, जो बहुत कठिन है और खराब प्रयोज्य है।
स्कॉट

5

एक और सरल निर्देश हो सकता है:

var appModule = angular.module("appModule", []);

appModule.directive("checkList", [function () {
return {
    restrict: "A",
    scope: {
        selectedItemsArray: "=",
        value: "@"
    },
    link: function (scope, elem) {
        scope.$watchCollection("selectedItemsArray", function (newValue) {
            if (_.contains(newValue, scope.value)) {
                elem.prop("checked", true);
            } else {
                elem.prop("checked", false);
            }
        });
        if (_.contains(scope.selectedItemsArray, scope.value)) {
            elem.prop("checked", true);
        }
        elem.on("change", function () {
            if (elem.prop("checked")) {
                if (!_.contains(scope.selectedItemsArray, scope.value)) {
                    scope.$apply(
                        function () {
                            scope.selectedItemsArray.push(scope.value);
                        }
                    );
                }
            } else {
                if (_.contains(scope.selectedItemsArray, scope.value)) {
                    var index = scope.selectedItemsArray.indexOf(scope.value);
                    scope.$apply(
                        function () {
                            scope.selectedItemsArray.splice(index, 1);
                        });
                }
            }
            console.log(scope.selectedItemsArray);
        });
    }
};
}]);

नियंत्रक:

appModule.controller("sampleController", ["$scope",
  function ($scope) {
    //#region "Scope Members"
    $scope.sourceArray = [{ id: 1, text: "val1" }, { id: 2, text: "val2" }];
    $scope.selectedItems = ["1"];
    //#endregion
    $scope.selectAll = function () {
      $scope.selectedItems = ["1", "2"];
  };
    $scope.unCheckAll = function () {
      $scope.selectedItems = [];
    };
}]);

और HTML:

<ul class="list-unstyled filter-list">
<li data-ng-repeat="item in sourceArray">
    <div class="checkbox">
        <label>
            <input type="checkbox" check-list selected-items-array="selectedItems" value="{{item.id}}">
            {{item.text}}
        </label>
    </div>
</li>

मैं एक प्लंकर भी शामिल कर रहा हूँ: http://plnkr.co/edit/XnFtyij4ed6RyFwnFN6V?p=preview


5

निम्नलिखित समाधान एक अच्छे विकल्प की तरह लगता है,

<label ng-repeat="fruit in fruits">
  <input
    type="checkbox"
    ng-model="fruit.checked"
    ng-value="true"
  > {{fruit.fruitName}}
</label>

और नियंत्रक मॉडल मूल्य fruitsइस तरह से होगा

$scope.fruits = [
  {
    "name": "apple",
    "checked": true
  },
  {
    "name": "orange"
  },
  {
    "name": "grapes",
    "checked": true
  }
];

जितना अधिक मैं इन उदाहरणों को देख रहा हूं, ऐसा लगता है कि मुझे अपने सरणी को ऑब्जेक्ट्स के एक सरणी में मैप करना होगा।
Winnemucca

4

आपको वह सब कोड लिखना नहीं है। AngularJS केवल ngTrueValue और ngFalueVVueue का उपयोग करके मॉडल और चेकबॉक्स को सिंक में रखेगा

यहाँ कोडपेन: http://codepen.io/paulbhartzog/pen/kBhzn

सांकेतिक टुकड़ा:

<p ng-repeat="item in list1" class="item" id="{{item.id}}">
  <strong>{{item.id}}</strong> <input name='obj1_data' type="checkbox" ng-model="list1[$index].data" ng-true-value="1" ng-false-value="0"> Click this to change data value below
</p>
<pre>{{list1 | json}}</pre>

यह ओपी की मांग नहीं है।
bfontaine

एक सूची में बाइंडिंग चेकबॉक्स वही है जो मुझसे पूछा गया था, और मैंने क्या किया। सरणी को अनुप्रयोग के अनुरूप संशोधित किया जा सकता है। मुद्दा यह है कि चेकबॉक्स बाध्य हैं। ngTrueValue और ngFalseValue का उपयोग दूसरे सरणी में मैप करने के लिए भी किया जा सकता है जो केवल अन्य विशेषताओं, जैसे नामों को सूचीबद्ध करता है।
पॉल बी। हर्ट्रोग

ओपी जाँच किए गए मूल्यों की एक सूची चाहता है, सभी मूल्यों की सूची नहीं, जाँच और अनियंत्रित।
bfontaine

4

इस निर्देश की जाँच करें जो चेकबॉक्स की प्रभावी सूची का प्रबंधन करता है। आशा है कि ये आपके काम आएगा। चेकलिस्ट मॉडल


4

सरणी पर सीधे काम करने और उसी समय एनजी-मॉडल का उपयोग करने का एक तरीका है ng-model-options="{ getterSetter: true }"

चाल अपने एनजी मॉडल में एक गेट्टर / सेटर फ़ंक्शन का उपयोग करना है। इस तरह आप अपने असली मॉडल के रूप में एक सरणी का उपयोग कर सकते हैं और इनपुट के मॉडल में बूलियन को "नकली" कर सकते हैं:

<label ng-repeat="fruitName in ['apple', 'orange', 'pear', 'naartjie']">
  <input
    type="checkbox"
    ng-model="fruitsGetterSetterGenerator(fruitName)"
    ng-model-options="{ getterSetter: true }"
  > {{fruitName}}
</label>

$scope.fruits = ['apple', 'pear']; // pre checked

$scope.fruitsGetterSetterGenerator = function(fruitName){
    return function myGetterSetter(nowHasFruit){
        if (nowHasFruit !== undefined){

            // Setter
            fruitIndex = $scope.fruits.indexOf(fruit);
            didHaveFruit = (fruitIndex !== -1);
            mustAdd = (!didHaveFruit && nowHasFruit);
            mustDel = (didHaveFruit && !nowHasFruit);
            if (mustAdd){
                $scope.fruits.push(fruit);
            }
            if (mustDel){
                $scope.fruits.splice(fruitIndex, 1);
            }
        }
        else {
            // Getter
            return $scope.user.fruits.indexOf(fruit) !== -1;
        }
    }
}

CAVEAT आपको इस विधि का उपयोग नहीं करना चाहिए यदि आपके सरणियाँ बड़ी हैं, तो myGetterSetterबहुत बार कहा जाएगा।

उस पर अधिक जानकारी के लिए, https://docs.angularjs.org/api/ng/directive/ngModelOptions देखें


3

मुझे योशी का जवाब पसंद है। मैंने इसे बढ़ाया ताकि आप एक से अधिक सूचियों के लिए एक ही फ़ंक्शन का उपयोग कर सकें।

<label ng-repeat="fruitName in fruits">
<input
type="checkbox"
name="selectedFruits[]"
value="{{fruitName}}"
ng-checked="selection.indexOf(fruitName) > -1"
ng-click="toggleSelection(fruitName, selection)"> {{fruitName}}
</label>


<label ng-repeat="veggieName in veggies">
<input
type="checkbox"
name="selectedVeggies[]"
value="{{veggieName}}"
ng-checked="veggieSelection.indexOf(veggieName) > -1"
ng-click="toggleSelection(veggieName, veggieSelection)"> {{veggieName}}
</label>



app.controller('SimpleArrayCtrl', ['$scope', function SimpleArrayCtrl($scope) {
  // fruits
  $scope.fruits = ['apple', 'orange', 'pear', 'naartjie'];
  $scope.veggies = ['lettuce', 'cabbage', 'tomato']
  // selected fruits
  $scope.selection = ['apple', 'pear'];
  $scope.veggieSelection = ['lettuce']
  // toggle selection for a given fruit by name
  $scope.toggleSelection = function toggleSelection(selectionName, listSelection) {
    var idx = listSelection.indexOf(selectionName);

    // is currently selected
    if (idx > -1) {
      listSelection.splice(idx, 1);
    }

    // is newly selected
    else {
      listSelection.push(selectionName);
    }
  };
}]);

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


3

यदि आपके पास एक ही फॉर्म में कई चेकबॉक्स हैं

नियंत्रक कोड

vm.doYouHaveCheckBox = ['aaa', 'ccc', 'bbb'];
vm.desiredRoutesCheckBox = ['ddd', 'ccc', 'Default'];
vm.doYouHaveCBSelection = [];
vm.desiredRoutesCBSelection = [];

कोड देखें

<div ng-repeat="doYouHaveOption in vm.doYouHaveCheckBox">
    <div class="action-checkbox">
        <input id="{{doYouHaveOption}}" type="checkbox" value="{{doYouHaveOption}}" ng-checked="vm.doYouHaveCBSelection.indexOf(doYouHaveOption) > -1" ng-click="vm.toggleSelection(doYouHaveOption,vm.doYouHaveCBSelection)" />
        <label for="{{doYouHaveOption}}"></label>
        {{doYouHaveOption}}
    </div>
</div>

<div ng-repeat="desiredRoutesOption in vm.desiredRoutesCheckBox">
     <div class="action-checkbox">
          <input id="{{desiredRoutesOption}}" type="checkbox" value="{{desiredRoutesOption}}" ng-checked="vm.desiredRoutesCBSelection.indexOf(desiredRoutesOption) > -1" ng-click="vm.toggleSelection(desiredRoutesOption,vm.desiredRoutesCBSelection)" />
          <label for="{{desiredRoutesOption}}"></label>
          {{desiredRoutesOption}}
     </div>
</div>        

3

ऊपर योशी के पद से प्रेरित। यहाँ plnkr है

(function () {
   
   angular
      .module("APP", [])
      .controller("demoCtrl", ["$scope", function ($scope) {
         var dc = this
         
         dc.list = [
            "Selection1",
            "Selection2",
            "Selection3"
         ]

         dc.multipleSelections = []
         dc.individualSelections = []
         
         // Using splice and push methods to make use of 
         // the same "selections" object passed by reference to the 
         // addOrRemove function as using "selections = []" 
         // creates a new object within the scope of the 
         // function which doesn't help in two way binding.
         dc.addOrRemove = function (selectedItems, item, isMultiple) {
            var itemIndex = selectedItems.indexOf(item)
            var isPresent = (itemIndex > -1)
            if (isMultiple) {
               if (isPresent) {
                  selectedItems.splice(itemIndex, 1)
               } else {
                  selectedItems.push(item)
               }
            } else {
               if (isPresent) {
                  selectedItems.splice(0, 1)
               } else {
                  selectedItems.splice(0, 1, item)
               }
            }
         }
         
      }])
   
})()
label {
  display: block;  
}
<!DOCTYPE html>
<html>

   <head>
      <link rel="stylesheet" href="style.css" />
   </head>

   <body ng-app="APP" ng-controller="demoCtrl as dc">
      <h1>checkbox-select demo</h1>
      
      <h4>Multiple Selections</h4>
      <label ng-repeat="thing in dc.list">
         <input 
            type="checkbox" 
            ng-checked="dc.multipleSelections.indexOf(thing) > -1"
            ng-click="dc.addOrRemove(dc.multipleSelections, thing, true)"
         > {{thing}}
      </label>
      
      <p>
         dc.multipleSelections :- {{dc.multipleSelections}}
      </p>
      
      <hr>
      
      <h4>Individual Selections</h4>
      <label ng-repeat="thing in dc.list">
         <input 
            type="checkbox" 
            ng-checked="dc.individualSelections.indexOf(thing) > -1"
            ng-click="dc.addOrRemove(dc.individualSelections, thing, false)"
         > {{thing}}
      </label>
      
      <p>
         dc.invidualSelections :- {{dc.individualSelections}}
      </p>
      
      <script data-require="jquery@3.0.0" data-semver="3.0.0" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js"></script>
      <script data-require="angular.js@1.5.6" data-semver="1.5.6" src="https://code.angularjs.org/1.5.6/angular.min.js"></script>
      <script src="script.js"></script>
   </body>

</html>


3

मेरे दूसरे पोस्ट के आधार पर यहाँ , मैं एक पुन: प्रयोज्य निर्देश दिया है।

की जाँच करें GitHub भंडार

(function () {
   
   angular
      .module("checkbox-select", [])
      .directive("checkboxModel", ["$compile", function ($compile) {
         return {
            restrict: "A",
            link: function (scope, ele, attrs) {
               // Defining updateSelection function on the parent scope
               if (!scope.$parent.updateSelections) {
                  // Using splice and push methods to make use of 
                  // the same "selections" object passed by reference to the 
                  // addOrRemove function as using "selections = []" 
                  // creates a new object within the scope of the 
                  // function which doesn't help in two way binding.
                  scope.$parent.updateSelections = function (selectedItems, item, isMultiple) {
                     var itemIndex = selectedItems.indexOf(item)
                     var isPresent = (itemIndex > -1)
                     if (isMultiple) {
                        if (isPresent) {
                           selectedItems.splice(itemIndex, 1)
                        } else {
                           selectedItems.push(item)
                        }
                     } else {
                        if (isPresent) {
                           selectedItems.splice(0, 1)
                        } else {
                           selectedItems.splice(0, 1, item)
                        }
                     }
                  }   
               }
               
               // Adding or removing attributes
               ele.attr("ng-checked", attrs.checkboxModel + ".indexOf(" + attrs.checkboxValue + ") > -1")
               var multiple = attrs.multiple ? "true" : "false"
               ele.attr("ng-click", "updateSelections(" + [attrs.checkboxModel, attrs.checkboxValue, multiple].join(",") + ")")
               
               // Removing the checkbox-model attribute, 
               // it will avoid recompiling the element infinitly
               ele.removeAttr("checkbox-model")
               ele.removeAttr("checkbox-value")
               ele.removeAttr("multiple")
               
               $compile(ele)(scope)
            }
         }
      }])
   
      // Defining app and controller
      angular
      .module("APP", ["checkbox-select"])
      .controller("demoCtrl", ["$scope", function ($scope) {
         var dc = this
         dc.list = [
            "selection1",
            "selection2",
            "selection3"
         ]
         
         // Define the selections containers here
         dc.multipleSelections = []
         dc.individualSelections = []
      }])
   
})()
label {
  display: block;  
}
<!DOCTYPE html>
<html>

   <head>
      <link rel="stylesheet" href="style.css" />
      
   </head>
   
   <body ng-app="APP" ng-controller="demoCtrl as dc">
      <h1>checkbox-select demo</h1>
      
      <h4>Multiple Selections</h4>
      <label ng-repeat="thing in dc.list">
         <input type="checkbox" checkbox-model="dc.multipleSelections" checkbox-value="thing" multiple>
         {{thing}}
      </label>
      <p>dc.multipleSelecitons:- {{dc.multipleSelections}}</p>
      
      <h4>Individual Selections</h4>
      <label ng-repeat="thing in dc.list">
         <input type="checkbox" checkbox-model="dc.individualSelections" checkbox-value="thing">
         {{thing}}
      </label>
      <p>dc.individualSelecitons:- {{dc.individualSelections}}</p>
      
      <script data-require="jquery@3.0.0" data-semver="3.0.0" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js"></script>
      <script data-require="angular.js@1.5.6" data-semver="1.5.6" src="https://code.angularjs.org/1.5.6/angular.min.js"></script>
      <script src="script.js"></script>
   </body>

</html>


3

HTML में (यह मानते हुए कि चेकबॉक्स एक तालिका में हर पंक्ति के पहले कॉलम में हैं)।

<tr ng-repeat="item in fruits">
    <td><input type="checkbox" ng-model="item.checked" ng-click="getChecked(item)"></td>
    <td ng-bind="fruit.name"></td>
    <td ng-bind="fruit.color"></td>
    ...
</tr>

में controllers.jsफ़ाइल:

// The data initialization part...
$scope.fruits = [
    {
      name: ....,
      color:....
    },
    {
      name: ....,
      color:....
    }
     ...
    ];

// The checked or not data is stored in the object array elements themselves
$scope.fruits.forEach(function(item){
    item.checked = false;
});

// The array to store checked fruit items
$scope.checkedItems = [];

// Every click on any checkbox will trigger the filter to find checked items
$scope.getChecked = function(item){
    $scope.checkedItems = $filter("filter")($scope.fruits,{checked:true});
};

3

यहाँ अभी तक एक और समाधान है। मेरे समाधान का उल्टा:

  • इसे किसी भी अतिरिक्त घड़ियों की आवश्यकता नहीं है (जो प्रदर्शन पर प्रभाव डाल सकती है)
  • इसे साफ रखने वाले कंट्रोलर में किसी भी कोड की आवश्यकता नहीं होती है
  • कोड अभी भी कुछ हद तक छोटा है
  • इसे कई स्थानों पर पुन: उपयोग करने के लिए बहुत कम कोड की आवश्यकता होती है क्योंकि यह सिर्फ एक निर्देश है

यहाँ निर्देश है:

function ensureArray(o) {
    var lAngular = angular;
    if (lAngular.isArray(o) || o === null || lAngular.isUndefined(o)) {
        return o;
    }
    return [o];
}

function checkboxArraySetDirective() {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, element, attrs, ngModel) {
            var name = attrs.checkboxArraySet;

            ngModel.$formatters.push(function(value) {
                return (ensureArray(value) || []).indexOf(name) >= 0;
            });

            ngModel.$parsers.push(function(value) {
                var modelValue = ensureArray(ngModel.$modelValue) || [],
                    oldPos = modelValue.indexOf(name),
                    wasSet = oldPos >= 0;
                if (value) {
                    if (!wasSet) {
                        modelValue = angular.copy(modelValue);
                        modelValue.push(name);
                    }
                } else if (wasSet) {
                    modelValue = angular.copy(modelValue);
                    modelValue.splice(oldPos, 1);
                }
                return modelValue;
            });
        }
    }
}

अंत में बस इसे इस तरह उपयोग करें:

<input ng-repeat="fruit in ['apple', 'banana', '...']" type="checkbox" ng-model="fruits" checkbox-array-set="{{fruit}}" />

और वह सब कुछ है। एकमात्र जोड़ checkbox-array-setविशेषता है।


3

आप AngularJS और jQuery को मिला सकते हैं। उदाहरण के लिए, आपको $scope.selected = [];नियंत्रक में , एक सरणी को परिभाषित करने की आवश्यकता है ।

<label ng-repeat="item in items">
    <input type="checkbox" ng-model="selected[$index]" ng-true-value="'{{item}}'">{{item}}
</label>

आप चयनित वस्तुओं के मालिक एक सरणी प्राप्त कर सकते हैं। विधि का उपयोग करके alert(JSON.stringify($scope.selected)), आप चयनित वस्तुओं की जांच कर सकते हैं।


बिल्कुल सही! ... यह एक वस्तु नहीं एक सरणी का उपयोग करके सबसे सरल समाधान है
मारियो कैम्पा

3
Jquery और Angular
Jens Alenius

इससे चयनित ऐरे में छेद हो जाएंगे। इस पोस्ट को देखें
विकास गौतम

2
  <div ng-app='app' >
    <div ng-controller='MainCtrl' >
       <ul> 
       <li ng-repeat="tab in data">
         <input type='checkbox' ng-click='change($index,confirm)' ng-model='confirm' />
         {{tab.name}} 
         </li>
     </ul>
    {{val}}
   </div>
 </div>


var app = angular.module('app', []);
 app.controller('MainCtrl',function($scope){
 $scope.val=[];
  $scope.confirm=false;
  $scope.data=[
   {
     name:'vijay'
     },
    {
      name:'krishna'
    },{
      name:'Nikhil'
     }
    ];
    $scope.temp;
   $scope.change=function(index,confirm){
     console.log(confirm);
    if(!confirm){
     ($scope.val).push($scope.data[index]);   
    }
    else{
    $scope.temp=$scope.data[index];
        var d=($scope.val).indexOf($scope.temp);
        if(d!=undefined){
         ($scope.val).splice(d,1);
        }    
       }
     }   
   })

1

इस पर एक नज़र डालें: चेकलिस्ट-मॉडल

यह जावास्क्रिप्ट सरणियों और वस्तुओं के साथ काम करता है और यह एनजी-रिपीट के बिना स्थिर HTML चेकबॉक्स का उपयोग कर सकता है

<label><input type="checkbox" checklist-model="roles" value="admin"> Administrator</label>
<label><input type="checkbox" checklist-model="roles" value="customer"> Customer</label>
<label><input type="checkbox" checklist-model="roles" value="guest"> Guest</label>
<label><input type="checkbox" checklist-model="roles" value="user"> User</label>

और जावास्क्रिप्ट पक्ष:

var app = angular.module("app", ["checklist-model"]);
app.controller('Ctrl4a', function($scope) {
    $scope.roles = [];
});

1

एक साधारण HTML ही इसे करने का तरीका:

<input type="checkbox"
       ng-checked="fruits.indexOf('apple') > -1"
       ng-click="fruits.indexOf('apple') > -1 ? fruits.splice(fruits.indexOf('apple'), 1) : fruits.push('apple')">
<input type="checkbox"
       ng-checked="fruits.indexOf('orange') > -1"
       ng-click="fruits.indexOf('orange') > -1 ? fruits.splice(fruits.indexOf('orange'), 1) : fruits.push('orange')">
<input type="checkbox"
       ng-checked="fruits.indexOf('pear') > -1"
       ng-click="fruits.indexOf('pear') > -1 ? fruits.splice(fruits.indexOf('pear'), 1) : fruits.push('pear')">
<input type="checkbox"
       ng-checked="fruits.indexOf('naartjie') > -1"
       ng-click="fruits.indexOf('apple') > -1 ? fruits.splice(fruits.indexOf('apple'), 1) : fruits.push('naartjie')">


1

इस उदाहरण का उपयोग करना@Umur Kontacı के का , मैं एक संपादित पृष्ठ की तरह किसी अन्य ऑब्जेक्ट / सरणी में चयनित डेटा को पकड़ने के लिए उपयोग करने के बारे में सोचता हूं।

डेटाबेस पर विकल्प पकड़ो

यहाँ छवि विवरण दर्ज करें

कुछ विकल्प टॉगल करें

यहाँ छवि विवरण दर्ज करें

उदाहरण के लिए, सभी रंग नीचे दिए गए हैं:

{
    "colors": [
        {
            "id": 1,
            "title": "Preto - #000000"
        },
        {
            "id": 2,
            "title": "Azul - #005AB1"
        },
        {
            "id": 3,
            "title": "Azul Marinho - #001A66"
        },
        {
            "id": 4,
            "title": "Amarelo - #FFF100"
        },
        {
            "id": 5,
            "title": "Vermelho - #E92717"
        },
        {
            "id": 6,
            "title": "Verde - #008D2F"
        },
        {
            "id": 7,
            "title": "Cinza - #8A8A8A"
        },
        {
            "id": 8,
            "title": "Prata - #C8C9CF"
        },
        {
            "id": 9,
            "title": "Rosa - #EF586B"
        },
        {
            "id": 10,
            "title": "Nude - #E4CAA6"
        },
        {
            "id": 11,
            "title": "Laranja - #F68700"
        },
        {
            "id": 12,
            "title": "Branco - #FFFFFF"
        },
        {
            "id": 13,
            "title": "Marrom - #764715"
        },
        {
            "id": 14,
            "title": "Dourado - #D9A300"
        },
        {
            "id": 15,
            "title": "Bordo - #57001B"
        },
        {
            "id": 16,
            "title": "Roxo - #3A0858"
        },
        {
            "id": 18,
            "title": "Estampado "
        },
        {
            "id": 17,
            "title": "Bege - #E5CC9D"
        }
    ]
}

और 2 प्रकार के डेटा ऑब्जेक्ट, arrayएक ऑब्जेक्ट के साथ और objectदो / अधिक ऑब्जेक्ट डेटा वाले:

  • डेटाबेस में चुने गए दो आइटम:

    [{"id":12,"title":"Branco - #FFFFFF"},{"id":16,"title":"Roxo - #3A0858"}]
  • डेटाबेस में चयनित एक आइटम:

    {"id":12,"title":"Branco - #FFFFFF"}

और यहाँ, मेरा जावास्क्रिप्ट कोड:

/**
 * Add this code after catch data of database.
 */

vm.checkedColors = [];
var _colorObj = vm.formData.color_ids;
var _color_ids = [];

if (angular.isObject(_colorObj)) {
    // vm.checkedColors.push(_colorObj);
    _color_ids.push(_colorObj);
} else if (angular.isArray(_colorObj)) {
    angular.forEach(_colorObj, function (value, key) {
        // vm.checkedColors.push(key + ':' + value);
        _color_ids.push(key + ':' + value);
    });
}

angular.forEach(vm.productColors, function (object) {
    angular.forEach(_color_ids, function (color) {
        if (color.id === object.id) {
            vm.checkedColors.push(object);
        }
    });
});

/**
 * Add this code in your js function initialized in this HTML page
 */
vm.toggleColor = function (color) {
    console.log('toggleColor is: ', color);

    if (vm.checkedColors.indexOf(color) === -1) {
        vm.checkedColors.push(color);
    } else {
        vm.checkedColors.splice(vm.checkedColors.indexOf(color), 1);
    }
    vm.formData.color_ids = vm.checkedColors;
};

मेरा Html कोड:

<div class="checkbox" ng-repeat="color in productColors">
    <label>
        <input type="checkbox"
               ng-checked="checkedColors.indexOf(color) != -1"
               ng-click="toggleColor(color)"/>
        <% color.title %>
    </label>
</div>

<p>checkedColors Output:</p>
<pre><% checkedColors %></pre>

नीचे संपादित कोड:

function makeCheckedOptions(objectOptions, optionObj) {
    var checkedOptions = [];
    var savedOptions = [];

    if (angular.isObject(optionObj)) {
        savedOptions.push(optionObj);
    } else if (angular.isArray(optionObj)) {
        angular.forEach(optionObj, function (value, key) {
            savedOptions.push(key + ':' + value);
        });
    }

    angular.forEach(objectOptions, function (object) {
        angular.forEach(savedOptions, function (color) {
            if (color.id === object.id) {
                checkedOptions.push(object);
            }
        });
    });

    return checkedOptions;
}

और नीचे दिए गए नए तरीके को कॉल करें:

vm.checkedColors = makeCheckedOptions(productColors, vm.formData.color_ids);

बस!


1

मैं एक सरणी नियंत्रक में डाल दिया है।

$scope.statuses = [{ name: 'Shutdown - Reassessment Required' },
    { name: 'Under Construction' },
    { name: 'Administrative Cancellation' },
    { name: 'Initial' },
    { name: 'Shutdown - Temporary' },
    { name: 'Decommissioned' },
    { name: 'Active' },
    { name: 'SO Shutdown' }]

मार्कअप पर मैंने कुछ इस तरह से डाला है

<div ng-repeat="status in $scope.statuses">
   <input type="checkbox" name="unit_status" ng-model="$scope.checkboxes[status.name]"> {{status.name}}
   <br>                        
</div>
{{$scope.checkboxes}}

आउटपुट निम्नलिखित था, नियंत्रक में मुझे यह जांचने की ज़रूरत थी कि क्या यह सही है या गलत; जाँच के लिए सही, अनुपस्थित के लिए अनुपस्थित / गलत।

{
"Administrative Cancellation":true,
"Under Construction":true,
"Shutdown - Reassessment Required":true,
"Decommissioned":true,
"Active":true
}

उम्मीद है की यह मदद करेगा।


0

मुझे लगता है कि नेस्टेड एनजी-रिपीट के लिए निम्नलिखित तरीका अधिक स्पष्ट और उपयोगी है। इसे प्लंकर पर देखें

इस सूत्र से उद्धरण :

<html ng-app="plunker">
    <head>
        <title>Test</title>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.4/angular.min.js"></script>
    </head>

    <body ng-controller="MainCtrl">
        <div ng-repeat="tab in mytabs">

            <h1>{{tab.name}}</h1>
            <div ng-repeat="val in tab.values">
                <input type="checkbox" ng-change="checkValues()" ng-model="val.checked"/>
            </div>
        </div>

        <br>
        <pre> {{selected}} </pre>

            <script>
                var app = angular.module('plunker', []);

                app.controller('MainCtrl', function ($scope,$filter) {
                    $scope.mytabs = [
             {
                 name: "tab1",
                 values: [
                     { value: "value1",checked:false },
                     { value: "value2", checked: false },
                     { value: "value3", checked: false },
                     { value: "value4", checked: false }
                 ]
             },
             {
                 name: "tab2",
                 values: [
                     { value: "value1", checked: false },
                     { value: "value2", checked: false },
                     { value: "value3", checked: false },
                     { value: "value4", checked: false }
                 ]
             }
                    ]
                    $scope.selected = []
                    $scope.checkValues = function () {
                        angular.forEach($scope.mytabs, function (value, index) {
                         var selectedItems = $filter('filter')(value.values, { checked: true });
                         angular.forEach(selectedItems, function (value, index) {
                             $scope.selected.push(value);
                         });

                        });
                    console.log($scope.selected);
                    };
                });
        </script>
    </body>
</html>

0

यहाँ उसी के लिए jsFillde लिंक दिया गया है, http://jsfiddle.net/techno2mahi/Lfw96ja6/

यह उस निर्देश का उपयोग करता है जो http://vitalets.github.io/checklist-model/ पर डाउनलोड के लिए उपलब्ध है ।

यह निर्देशन करने के लिए अच्छा है क्योंकि आपके एप्लिकेशन को इस कार्यक्षमता की अक्सर आवश्यकता होगी।

कोड नीचे है:

HTML:

<div class="container">
    <div class="ng-scope" ng-app="app" ng-controller="Ctrl1">
        <div class="col-xs-12 col-sm-6">
            <h3>Multi Checkbox List Demo</h3>
            <div class="well">  <!-- ngRepeat: role in roles -->
                <label ng-repeat="role in roles">
                    <input type="checkbox" checklist-model="user.roles" checklist-value="role"> {{role}}
                </label>
            </div>

            <br>
            <button ng-click="checkAll()">check all</button>
            <button ng-click="uncheckAll()">uncheck all</button>
            <button ng-click="checkFirst()">check first</button>
            <div>
                <h3>Selected User Roles </h3>
                <pre class="ng-binding">{{user.roles|json}}</pre>
            </div>

            <br>
            <div><b/>Provided by techno2Mahi</b></div>
        </div>

जावास्क्रिप्ट

var app = angular.module("app", ["checklist-model"]);
app.controller('Ctrl1', function($scope) {
  $scope.roles = [
    'guest',
    'user',
    'customer',
    'admin'
  ];
  $scope.user = {
    roles: ['user']
  };
  $scope.checkAll = function() {
    $scope.user.roles = angular.copy($scope.roles);
  };
  $scope.uncheckAll = function() {
    $scope.user.roles = [];
  };
  $scope.checkFirst = function() {
    $scope.user.roles.splice(0, $scope.user.roles.length);
    $scope.user.roles.push('guest');
  };
});

HTML अच्छी तरह से गठित नहीं है - <div>बंद करने से अधिक उद्घाटन टैग हैं </div>,। क्या आपने कुछ छोड़ा है?
पीटर मॉर्टेंसन

0

मेरे बच्चे की कोशिश करो:

**

myApp.filter('inputSelected', function(){
  return function(formData){
    var keyArr = [];
    var word = [];
    Object.keys(formData).forEach(function(key){
    if (formData[key]){
        var keyCap = key.charAt(0).toUpperCase() + key.slice(1);
      for (var char = 0; char<keyCap.length; char++ ) {
        if (keyCap[char] == keyCap[char].toUpperCase()){
          var spacedLetter = ' '+ keyCap[char];
          word.push(spacedLetter);
        }
        else {
          word.push(keyCap[char]);
        }
      }
    }
    keyArr.push(word.join(''))
    word = [];
    })
    return keyArr.toString();
  }
})

**

फिर चेकबॉक्स के साथ किसी भी एनजी-मॉडल के लिए, यह आपके द्वारा चुने गए सभी इनपुट की एक स्ट्रिंग लौटाएगा:

<label for="Heard about ITN">How did you hear about ITN?: *</label><br>
<label class="checkbox-inline"><input ng-model="formData.heardAboutItn.brotherOrSister" type="checkbox" >Brother or Sister</label>
<label class="checkbox-inline"><input ng-model="formData.heardAboutItn.friendOrAcquaintance" type="checkbox" >Friend or Acquaintance</label>


{{formData.heardAboutItn | inputSelected }}

//returns Brother or Sister, Friend or Acquaintance
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.