অ্যাঙ্গুলারজেএস-এ এনজি-রিপিটের সাহায্যে কীগুলি এবং মানগুলি পুনরুক্ত করা যায়?


679

আমার নিয়ামকটিতে আমার মতো ডেটা রয়েছে: $scope.object = data

এখন এই ডেটা থেকে কী এবং মানগুলির সাথে অভিধান রয়েছে json

আমি object.nameটেমপ্লেটের সাথে বৈশিষ্ট্যটি অ্যাক্সেস করতে পারি । এমন কি কোনও উপায় আছে যা আমি কীগুলি দিয়ে পুনরাবৃত্তি করতে পারি এবং সেগুলি যেমন টেবিলে প্রদর্শন করতে পারি

<tr><td> {{key}} </td> <td> data.key </td>

তথ্য এই মত

{
    "id": 2,
    "project": "wewe2012",
    "date": "2013-02-26",
    "description": "ewew",
    "eet_no": "ewew",
}

উত্তর:


1407

কেমন:

<table>
  <tr ng-repeat="(key, value) in data">
    <td> {{key}} </td> <td> {{ value }} </td>
  </tr>
</table>

এই পদ্ধতিটি ডক্সে তালিকাভুক্ত করা হয়েছে: https://docs.angularjs.org/api/ng/directive/ngRepeat


1
এটি কাজ করা উচিত: plnkr.co/edit/7AQF6k7hf2aZbWFmhVoX?p= ​​পূর্বরূপ । এটি কাজ করা বন্ধ না হওয়া পর্যন্ত আপনি এটি সংশোধন করতে পারেন?
জোশ ডেভিড মিলার

2
ইহা যাদুর মত কাজ করে। একমাত্র ক্যাচটি হ'ল এটি কীগুলি দ্বারা বর্ণমালা করা হবে যাতে আইটেম অর্ডার প্রদর্শনের সাথে প্রাসঙ্গিক হলে নামকরণের বিষয়টি গুরুত্বপূর্ণ।
ডিসপ্লে নাম

29
@ ইসাবেলএইচএম বিভিন্ন কারণে, আমাদের মধ্যে অনেকগুলি একটিতে বস্তুর উপর পুনরাবৃত্তি করার বিরুদ্ধে সুপারিশ করে ngRepeat। আসলে, আমি একবার শুনেছি কোনও মূল দলের সদস্য আফসোস করে যাচ্ছেন এমন দক্ষতার প্রয়োগ করে! নিয়ামকের মধ্যে থাকা বস্তুকে একটি অ্যারেতে রূপান্তর করা সাধারণত ভাল; এটি অভিপ্রায়কে আরও পরিষ্কার করে তোলে এবং নির্দিষ্ট কিছু ক্ষেত্রে অদ্ভুত / অবিশ্বাস্য আচরণের ঝুঁকি হ্রাস করে। এবং আপনি স্বাভাবিক উপায়ে বাছাই করতে পারেন। :-)
জোশ ডেভিড মিলার

2
ইসাবেলএইচএম যেমন বলেছে, আউটপুটটিকে বর্ণ অনুসারে আদেশ করা হয়। এটি না করার জন্য জোর করার কোনও উপায় আছে?
নিউম্যান

4
@ শেফফ্লাওয়ার্স যেমন আমি পূর্ববর্তী মন্তব্যে উল্লেখ করেছি, আমি বস্তুগুলির কীগুলির দ্বারা পুনরাবৃত্তি করার পরামর্শ দিচ্ছি না। এটি আপনার নিয়ামকের একটি অ্যারেতে রূপান্তর করা ভাল। ধরে নেওয়া যাক এই আপনার ব্যবসার মডেল উপর ভিত্তি করে, ES6 এটা খুব সহজ করে তোলে করতে কথ্য পথ নয়: Object.getOwnPropertyNames(data).map(k => ({key:k, value:data[k]));
জোশ ডেভিড মিলার

132

আপনি যদি দ্বি-দফা বাধ্যতার সাথে সম্পত্তি মানটি সম্পাদনা করতে চান:

<tr ng-repeat="(key, value) in data">
    <td>{{key}}<input type="text" ng-model="data[key]"></td>
</tr>

2
ধন্যবাদ! কৌতূহলের বাইরে, আপনি কোথাও ডক্সে এই কৌশলটি খুঁজে পেয়েছেন? আপনার উত্তর এখানে না পাওয়া পর্যন্ত আমি বৃথা অনুসন্ধান করেছি searched
রজার

@ সিবিকে: এটিই আমি খুঁজছিলাম .. ধন্যবাদ
জেকেএ

আপনাকে অনেক ধন্যবাদ, আপনি আমার দিনটি সংরক্ষণ করেছেন :)
সের্গেই

4
@ cbk এটি ব্যবহার করার মতো নয় ng-model="value"?
মাইক হ্যারিসন

1
@ মাইকেরহরিসন ng-repeatমূলত অবজেক্টটির উপরে পুনরাবৃত্তি করছে এবং কী-মান জোড়ায় ফিরে আসবে। এরকম ভাবুন for(var value in arrayOfValues) { ... }। যদি আপনি valueআপনার লুপের ভিতরে ভেরিয়েবলটি পুনরায় বরাদ্দ করেন তবে আপনি যা অভ্যন্তরের অভ্যন্তরে রয়েছে তা পরিবর্তন করছেন না arrayOfValues, আপনি কেবল valueনতুন কোনও বস্তুর দিকে পুনরায় নির্দেশ করছেন।
জন সেনচিনা

12

আমি মনে করি না এটি করার জন্য কৌনিকটিতে একটি অন্তর্নির্মিত ফাংশন রয়েছে, তবে আপনি সমস্ত শিরোনামের নাম সম্বলিত একটি পৃথক স্কোপ সম্পত্তি তৈরি করে এটি করতে পারেন এবং আপনি এই সম্পত্তিটি স্বয়ংক্রিয়ভাবে পূরণ করতে পারেন:

var data = {
  foo: 'a',
  bar: 'b'
};

$scope.objectHeaders = [];

for ( property in data ) {
  $scope.objectHeaders.push(property); 
}

// Output: [ 'foo', 'bar' ]

1
আপনার উত্তরটি ঠিকঠাক কাজ করে যদি একটি কৌণিক নিয়ামকের (ওপিতে একটি ভিউ লুপ জিজ্ঞাসা করা হয়) ভিতরে ডেটা দিয়ে লুপ করা দরকার।
আন্তোনিও ম্যাক্স

5

বর্ণানুক্রমিক ক্রমে কী-মানগুলির প্রদর্শন এড়াতে আমরা নীচের পদ্ধতিটি অনুসরণ করতে পারি।

জাভাস্ক্রিপ্ট

$scope.data = {
   "id": 2,
   "project": "wewe2012",
   "date": "2013-02-26",
   "description": "ewew",
   "eet_no": "ewew",
};
var array = [];
for(var key in $scope.data){
    var test = {};
    test[key]=$scope.data[key];
    array.push(test);
}
$scope.data = array;

এইচটিএমএল

<p ng-repeat="obj in data">
   <font ng-repeat="(key, value) in obj">
      {{key}} : {{value}}
   </font>
</p>

কীওয়ার্ডে সদৃশ নকল
অমানুয়েল 2

4

একটি টুডু তালিকার উদাহরণ যা কোন বস্তুর দ্বারা লুপ করে ng-repeat:

var app = angular.module('toDolistApp', []);
app.controller('toDoListCntrl', function() {
  var self = this;
  self.toDoListItems = {};// []; //dont use square brackets if keys are string rather than numbers.
  self.doListCounter = 0;

  self.addToDoList = function() {		  		   
    var newToDoItem = {};
    newToDoItem.title     = self.toDoEntry;
    newToDoItem.completed = false;		   

    var keyIs = "key_" + self.doListCounter++;  		   

    self.toDoListItems[keyIs] = newToDoItem;		   
    self.toDoEntry = ""; //after adding the item make the input box blank.
  };
});

app.filter('propsCounter', function() {
  return function(input) {
    return Object.keys(input).length;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="toDolistApp">    
  <div ng-controller="toDoListCntrl as toDoListCntrlAs">
    Total Items: {{toDoListCntrlAs.toDoListItems | propsCounter}}<br />
    Enter todo Item:  <input type="text" ng-model="toDoListCntrlAs.toDoEntry"/>
    <span>{{toDoListCntrlAs.toDoEntry}}</span>
    <button ng-click="toDoListCntrlAs.addToDoList()">Add Item</button> <br/>
    <div ng-repeat="(key, prop) in toDoListCntrlAs.toDoListItems"> 
      <span>{{$index+1}} : {{key}}   : Title = {{ prop.title}} : Status = {{ prop.completed}} </span>
    </div>     
  </div>    
</body>


1
স্কয়ার বন্ধনী ব্যবহার না করার বিষয়ে মন্তব্যটি সত্যই সহায়ক ছিল। এই পরিবর্তনটি আমার কোড স্থির করেছে। ধন্যবাদ।
মাইকেল খলিলি

আমিও. কেউ ব্যাখ্যা করতে পারেন কেন কোঁকড়ানো বন্ধনী ব্যবহার করে আমার কোড সংশোধন করা হয়েছে?
22:48 18

1

এখানে সম্পূর্ণ উদাহরণ: -

<!DOCTYPE html >
<html ng-app="dashboard">
<head>
<title>AngularJS</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<link rel="stylesheet" href="./bootstrap.min.css">
<script src="./bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>
</head>
<body ng-controller="myController">
    <table border='1'>
        <tr ng-repeat="(key,val) in collValues">
            <td ng-if="!hasChildren(val)">{{key}}</td>  
            <td ng-if="val === 'string'">
                <input type="text" name="{{key}}"></input>
            </td>
            <td ng-if="val === 'number'">
                <input type="number" name="{{key}}"></input>
            </td>
            <td ng-if="hasChildren(val)" td colspan='2'>
                <table border='1' ng-repeat="arrVal in val">
                    <tr ng-repeat="(key,val) in arrVal">
                        <td>{{key}}</td>    
                        <td ng-if="val === 'string'">
                            <input type="text" name="{{key}}"></input>
                        </td>
                        <td ng-if="val === 'number'">
                            <input type="number" name="{{key}}"></input>
                        </td>
                    </tr>
                </table>                
            </td>

        </tr>       
    </table>
</body>

<script type="text/javascript">

    var app = angular.module("dashboard",[]);
    app.controller("myController",function($scope){
        $scope.collValues = {
            'name':'string',
            'id':'string',
            'phone':'number',
            'depart':[
                    {
                        'depart':'string',
                        'name':'string' 
                    }
            ]   
        };

        $scope.hasChildren = function(bigL1) {
            return angular.isArray(bigL1);
} 
    });
</script>
</html>


0

আপনি এটি আপনার জাভাস্ক্রিপ্ট (নিয়ন্ত্রক) বা আপনার এইচটিএমএল (কৌণিক দর্শন) এ করতে পারেন ...

JS:

$scope.arr = [];
for ( p in data ) {
  $scope.arr.push(p); 
}

এইচটিএমএল:

<tr ng-repeat="(k, v) in data">
    <td>{{k}}<input type="text" ng-model="data[k]"></td>
</tr>

আমি বিশ্বাস করি যে এইচটিএমএল উপায়টি আরও কৌণিক, তবে আপনি নিজের নিয়ামকটিতেও এটি করতে পারেন এবং এটি এইচটিএমএলে পুনরুদ্ধার করতে পারেন ...

অবজেক্ট কীগুলি দেখার জন্য এটি খারাপ ধারণা নয়, তারা আপনাকে কীগুলি প্রয়োজন হলে একটি অ্যারে দেয়, আরও তথ্য এখানে:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys


-2

এখানে একটি কার্যকারী উদাহরণ:

<div class="item item-text-wrap" ng-repeat="(key,value) in form_list">
  <b>{{key}}</b> : {{value}}
</div>

সম্পাদিত

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