অ্যাঙ্গুলারজেএস-এর সাথে আমি চেকবক্স মানগুলির তালিকাতে কীভাবে আবদ্ধ করব?


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">ইত্যাদি মডেলটি হ'ল: apple "আপেল": সত্য, "কমলা": মিথ্যা, "নাশপাতি": সত্য, "নর্তজি": সত্য}
মার্ক রাজকক


1
গ্রহণযোগ্য উত্তর অতীতে তাকান নিশ্চিত হন। আমার আর একটি উত্তর আছে যা আমার মতে অনেক বেশি মার্জিত।
জেসন সোয়েট

3
naartjie!? এটি আপনাকে কেবল বোতল দেয়! : ডি
পাইটর কুলা

1
@ পিপমকিন হহে এটি দেখেছে। আপনি ঠিক বলেছেন: ডি
নিকপোনলাইন

উত্তর:


927

এই সমস্যাটির কাছে যাওয়ার জন্য দুটি উপায় রয়েছে। হয় সরল অ্যারে বা বস্তুর একটি অ্যারে ব্যবহার করুন। প্রতিটি সমাধানের পক্ষে এটির পক্ষে মতামত রয়েছে। নীচে আপনি প্রতিটি মামলার জন্য একটি খুঁজে পাবেন।


ইনপুট ডেটা হিসাবে একটি সাধারণ অ্যারে সহ

এইচটিএমএল দেখতে দেখতে পারে:

<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);
    }
  };
}]);

পেশাদাররা : সাধারণ ডেটা কাঠামো এবং নাম অনুসারে টগল করা হ্যান্ডেল করা সহজ

কনস : অ্যাড / রিমুভ করা দু'টি তালিকার হিসাবে জটিল (ইনপুট এবং নির্বাচন) পরিচালনা করতে হবে


ইনপুট ডেটা হিসাবে একটি অবজেক্ট অ্যারের সাথে

এইচটিএমএল দেখতে দেখতে পারে:

<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);
}]);

পেশাদাররা : যুক্ত / সরানো খুব সহজ

কনস : কিছুটা জটিল তথ্য কাঠামো এবং নাম অনুসারে টগল করা জটিল ome বা একটি সহায়ক পদ্ধতির প্রয়োজন


ডেমো : http://jsbin.com/ImAqUC/1/


10
এফওয়াইআই, $ ফিল্টার ইনজেকশনের পরিবর্তে আপনি ফিল্টারফিল্টার ইনজেকশন করতে পারেন এবং তারপরে নিম্নরূপ ব্যবহার করতে পারেন: রিটার্ন ফিল্টার ফিল্টার ($ স্কোপ.ফাল, {চেক করা: সত্য}); অন্তর্নির্মিত এবং কাস্টম ফিল্টারগুলি filter ইনজেক্টরের সাথে নাম ফিল্টারনাম ফিল্টার দিয়ে নিবন্ধিত হয়েছে ("ফিল্টারনাম" ইটালিকের মধ্যে থাকা উচিত) - $ ফিল্টারপ্রাইডার ডকস
মার্ক রাজকক

24
value="{{fruit.name}}"ng-checked="fruit.checked"এনজি-মডেল ব্যবহার করা হওয়ায়, এবং অতিরিক্ত অতিরিক্ত হয়।
মার্ক রাজকোক

3
আমি লক্ষ্য করেছি যে মডেলটিতে "পরীক্ষিত" নির্দিষ্ট করার দরকার নেই,
অ্যাঙ্গুলার

3
এনজি-পরিবর্তনের পরিবর্তে এনজি-পরিবর্তন ব্যবহার করা উচিত কারণ এটি প্রান্তের কেসগুলি আরও ভালভাবে পরিচালনা করে।
amccausl

2
@ViktorMolokostov যে শুধু, উপযোগী হতে যদি আপনি কি ফর্মটি জমা দিতে হতো ঐতিহ্যগতভাবে । অর্থ এটি অ্যাকশন হ্যান্ডলারে পোস্ট করা (কিছু সার্ভার সাইড স্ক্রিপ্ট)। পিএইচপি সহ, এই জাতীয় নামের একটি ফর্ম উপাদান (বর্গাকার বন্ধনী ব্যবহার করে) অনুরোধের ডেটাতে একটি অ্যারে তৈরি করে। আপনি সহজেই নির্বাচিত ফলগুলি পরিচালনা করতে পারেন।
যোশি

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
@ কলিপ্টো - এটি অবশ্যই উত্তর। আমি এটি তাদের (যারা আমার মতো) যারা বস্তুগুলির সাথে কাজ করছেন তাদের জন্য আবার লিখেছি
কাইল

5
আপনি যেমন করেন তেমনই আমি করি তবে সক্ষমিত কী করে (color,enabled) in colors?
সেবাস্তিয়ান

3
@ সেবাস্তিয়ান, যেহেতু colorsএকটি বস্তু, যখন আপনি এটি পুনরাবৃত্তি করেন - আপনি জোড়া পান (key,value)
kolypto

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
এটি কতটা সহজ তা ভালবাসুন, ঠিক আমি যা খুঁজছি (যদিও আমাকে স্বীকার করতে হবে যে @ উইটলেটস নির্দেশিকা আশ্চর্যজনক)। এই উড়ালটি
সামুরাই_জেন

আমি সামুরাই জানে আমার কথা! আমার যা প্রয়োজন ঠিক তা প্রদর্শন করা কত সহজ ছিল! :)
ফ্রান্সিস রডরিগস

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= পূর্বরূপ


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
};

এই পদ্ধতিটি সমস্ত পরিস্থিতিতে কাজ করবে না, তবে এটি কার্যকর করা সহজ।


এটি একটি খুব মার্জিত সমাধান এবং আমার কেস ফিট করে (
এজেএক্স

চুমু পদ্ধতিটি ব্যবহার করে
জিওমরিলো

8

যেহেতু আপনি একটি উত্তর গ্রহণ করেছেন যাতে একটি তালিকা ব্যবহৃত হয়নি, তাই আমি আমার মন্তব্য প্রশ্নের উত্তরটি "না, এটি একটি তালিকা হতে হবে না" ধরে নেব। আমার এই ধারণাটিও ছিল যে সম্ভবত আপনি এইচটিএমএল সার্ভারের দিকটি উপস্থাপন করছেন, যেহেতু "চেকড" আপনার নমুনা এইচটিএমএলে উপস্থিত রয়েছে (এনজি-মডেল যদি আপনার চেকবক্সগুলিকে মডেল করার জন্য ব্যবহৃত হত) এটির প্রয়োজন হবে না)।

যাইহোক, আমি যখন এই প্রশ্নটি জিজ্ঞাসা করছিলাম তখন আমার মনে কী ছিল তা এখানে ধরেই রেখেছি, ধরে নিই যে আপনি এইচটিএমএল সার্ভারের পাশ তৈরি করছেন:

<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>

ng-init সার্ভার-সাইড উত্পাদিত এইচটিএমএলকে প্রাথমিকভাবে নির্দিষ্ট চেকবক্সগুলি সেট করার অনুমতি দেয়।

বেহালার


8

আমি মনে করি সবচেয়ে সহজ সমাধানটি হবে 'নির্বাচিত' ব্যবহার করে 'একাধিক' নির্দিষ্ট করা:

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

অন্যথায়, আমি মনে করি আপনাকে তালিকাটি তৈরি করতে তালিকার প্রক্রিয়া করতে হবে ( $watch()চেকবক্সগুলির সাথে মডেল অ্যারে বাইন্ডটি যুক্ত করে)।


3
তিনি একটি চেকবক্সের তালিকা চাইছেন, এবং তবুও আপনি তাকে বিকল্পগুলির সাথে নির্বাচন সম্পর্কে বলছেন। যা সম্পূর্ণ আলাদা।
ক্রেজি সাবাথ

@ ক্র্যাজি সাবাথ: তবুও আপনি বুঝতে পারছেন না যে তিনি কোনও বিকল্প সমাধানের পরামর্শ দিচ্ছেন এবং এই উত্তরটি অন্য 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 = [];
    };
}]);

এবং এইচটিএমএল:

<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= পূর্বরূপ


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
  }
];

আমি এই উদাহরণগুলির দিকে যত বেশি নজর দিচ্ছি মনে হচ্ছে আমাকে আমার অ্যারে অবজেক্টের অ্যারেতে ম্যাপ করতে হবে।
উইনেমুকা

4

আপনাকে সমস্ত কোড লিখতে হবে না। অ্যাংুলারজেএস মডেল এবং চেকবাক্সগুলিকে কেবল এনজিট্রুভ্যালু এবং এনজিফ্যালসভ্যালু ব্যবহার করে সিঙ্কে রাখবে

কোডেপেন এখানে: 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;
        }
    }
}

ক্যাভেট আপনার অ্যারেগুলি বড় হলে আপনার এই পদ্ধতিটি ব্যবহার করা উচিত নয়myGetterSetter called

সে সম্পর্কে আরও তথ্যের জন্য 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

এইচটিএমএলে (ধরুন যে টেবিলের প্রতিটি সারির প্রথম কলামে চেকবক্সগুলি রয়েছে)।

<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)), আপনি নির্বাচিত আইটেমগুলি চেক করতে পারেন।


পারফেক্ট! ... এটি অ্যারে অবজেক্ট নয়, ব্যবহার করে সর্বাধিক সহজ সমাধান
মারিও ক্যাম্পা


এটি নির্বাচিত অ্যারেতে গর্ত তৈরি করবে। এই পোস্টটি দেখুন
বিকাশ গৌতম

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

এটি একবার দেখুন: চেকলিস্ট-মডেল

এটি জাভাস্ক্রিপ্ট অ্যারে এবং অবজেক্টগুলির সাথে কাজ করে এবং এটি এনজি-রিপিট ছাড়াই স্থির এইচটিএমএল চেকবক্সগুলি ব্যবহার করতে পারে

<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

এটি করার এক সহজ উপায়:

<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

এই উদাহরণ ব্যবহার করে@ উমুর কনটাসের আমি অন্য সম্পাদন পৃষ্ঠার মতো অন্য কোনও অবজেক্ট / অ্যারে জুড়ে নির্বাচিত ডেটা ধরতে ব্যবহার করার কথা মনে করি।

ডাটাবেসে ক্যাচ অপশন

এখানে চিত্র বর্ণনা লিখুন

কিছু বিকল্প টগল করুন

এখানে চিত্র বর্ণনা লিখুন

উদাহরণস্বরূপ, নীচে সমস্ত রঙের জসন:

{
    "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"
        }
    ]
}

এবং দুটি ধরণের ডেটা অবজেক্টের 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;
};

আমার এইচটিএমএল কোড:

<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

আমি মনে করি নীচের উপায়ে নেস্টেড এনজি-পুনরাবৃত্তিগুলির জন্য আরও স্পষ্ট এবং কার্যকর। এটি Plunker এ দেখুন

এই থ্রেড থেকে উদ্ধৃতি :

<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

এখানে একই জন্য জেএসফিল্ড লিঙ্ক, http://jsfiddle.net/techno2mahi/Lfw96ja6/

এটি http://vitalets.github.io/checklist-model/ এ ডাউনলোডের জন্য উপলব্ধ নির্দেশিকাটি ব্যবহার করে ।

আপনার অ্যাপ্লিকেশনটির প্রায়শই এই কার্যকারিতাটির প্রয়োজন হবে বলে নির্দেশনা রাখা ভাল।

কোডটি নীচে রয়েছে:

এইচটিএমএল:

<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');
  };
});

এইচটিএমএলটি সুগঠিত নয় - <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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.