var appData = [
{
name: 'C++ä»å
¥é¨å°æ¾å¼',
author: 'dreamapple',
books: [
{name: 'github'},
{name: 'google'},
{name: 'nodejs'},
{name: 'react'}
]
},
{
name: 'Javaä»å
¥é¨å°è·è·¯',
author: 'åµåµå',
books: [
{name: 'éªç¢§'},
{name: 'ç¾äºå¯ä¹'},
{name: '鸡尾é
'}
]
}
];
ç°å¨æè¿ä¹ä¸ä¸ªè¦æ±ï¼æéè¦å°ä¸é¢çé£ä¸ª appData
循ç¯åºæ¥ï¼å
¶ä¸è¿è¦å¾ªç¯åºæ¥ books
éé¢çæ¯ä¸é¡¹ï¼ç¶åæ¯ä¸ä¸ª books
éé¢çæ¯ä¸é¡¹é½å¯ä»¥è¿è¡å é¤ï¼ä¹å¯ä»¥ç»æ¯ä¸ä¸ª books
æ°ç»éé¢æ·»å æ°çä¸é¡¹ã
ï¼1ï¼å¾ªç¯åºæ¥è¿ä¸ª appData
æ°æ®è¿æ¯å¾å®¹æçï¼éè¿åµå¥ç ngRepeat
å¾æ¹ä¾¿çå°±å¯ä»¥æå®äºã
ï¼2ï¼å
³äºåµå¥æ们è½å¤ä½¿ç¨çç´¢å¼æ¯ $index
ï¼ä½æ¯ä¸¤å±ä»¥ä¸çè¯ï¼å¦ææ¯ä¸å±åµå¥é½ä½¿ç¨ $index
ä½ä¸ºç´¢å¼çè¯ï¼å¿å¿
ä¼å¼èµ·æ··ä¹±ãè¿ä¸ªæ¶åå°±éè¦æ们æ³ä¸äºåæ³å»å¾å°æ¯ä¸å±çç´¢å¼ã
ï¼3ï¼æ们ç®åæ¯è¾å¥½çä¸ä¸ªåæ³å°±æ¯éè¿ ngInit
æ令ï¼ç¶åå¨å¾ªç¯å¼å§çæ¶åå°æ¯ä¸å±çç´¢å¼ä¿åå¨ä¸ä¸ªåéä¸ï¼ç¶åå°±å¯ä»¥å¨å¾ªç¯çä¸åå±çº§ä¹é´ä½¿ç¨äºã
ï¼4ï¼æ们è¿éè¦å®ä¹å¦ä¸ä¸ªæ°ç» vm.tempItem
ï¼è¿ä¸ªæ°ç»ä¹ç¨äºå¾ªç¯ï¼å¾ªç¯åºæ¥çæ¯ä¸é¡¹ç¨ä½è¢«æ·»å 项çæ°æ®æ¨¡åã
注æï¼å¾ªç¯ books
æ°ç»æ们è¿æä¸äºéè¦æ³¨æçå°æ¹ï¼æ们è¦ä½¿ç¨ track by
è¯æ³ï¼ä¸ç¶æ¯æ¬¡å¢å æè
å é¤ books
éé¢çå
容æ¶ï¼ books
æ¯ä¸é¡¹ç $index
ä¸ä¼åçååï¼é£ä¹å°±ä¸å¥½è¿è¡å é¤æä½äºã
ææéé¢çéç¹é¨ååç¬æ¿äºåºæ¥ï¼ç¶å大家ä¸èµ·æ¥çä¸çï¼é¡µé¢é¨åï¼
<ul class="list-group" ng-repeat="item in vm.appData" ng-init="outerIndex = $index">
<h3>{{item.name}}<span class="outer-index">outerIndex:{{outerIndex}}</span></h3>
<h4>{{item.author}}</h4>
<li class="list-group-item">
<ul class="list-group">
<li class="list-group-item" ng-repeat="v in item.books track by $index" ng-init="innerIndex = $index">
{{v.name}} <span class="inner-index">innerIndex:{{innerIndex}}</span><button class="btn btn-danger" ng-click="vm.removeItem(outerIndex, innerIndex)">å é¤</button>
</li>
<li class="list-group-item">
<form class="form-inline">
<input class="form-control" ng-model="vm.tempItem[$index]" type="text">
<button class="btn btn-primary" ng-click="vm.addItem(outerIndex)">æ·»å ä¸é¡¹</button>
</form>
</li>
</ul>
</li>
<hr ng-show="!$last">
</ul>
æ§å¶å¨é¨åï¼
function removeItem(outerIndex, innerIndex) {
vm.appData[outerIndex].books.splice(innerIndex, 1);
}
æ们å¯ä»¥å
çæ§å¶å¨éé¢çå½æ°ï¼ removeItem
è¿ä¸ªå½æ°æ两个åæ°ï¼ä¸ä¸ªæ¯ outerIndex
ï¼ä¸ä¸ªæ¯ innerIndex
ï¼å
¶ä¸ outerIndex
表示çæ¯ç¬¬ä¸å±å¾ªç¯ç $index
ç´¢å¼ï¼ innerIndex
表示çæ¯ç¬¬äºå±ç $index
ç´¢å¼ãæ¯æ¬¡å é¤ä¸é¡¹æ们é½éè¦ç¥éæ¯å é¤ç¬¬ä¸å±å¾ªç¯ä¸åªä¸ä¸ªå¯¹è±¡ä¸çåªä¸é¡¹ã
å¨é¡µé¢ä¸æ们éè¿ ng-init="outerIndex = $index"
ä¿åäºç¬¬ä¸å±å¾ªç¯ç $index
ï¼éè¿ä½¿ç¨ ng-init="innerIndex = $index"
ä¿åäºç¬¬äºå±å¾ªç¯ç $index
ãæ以æ¥ä¸æ¥çæä½é½å¾æ¹ä¾¿äºã
å¦æ对æä¸é¢æ说çè¿æ²¡æå¾å¥½ç解çè¯ï¼ä½ å¯ä»¥å°è¯èªå·±ç»ä¹ ä¸ä¸ãä¸é¢æ¯æºç é¨åï¼
HTMLé¨å
<head>
<meta charset="UTF-8">
<title>1</title>
<link rel="stylesheet" href="
http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.css">
<link rel="stylesheet" href="../lib/jsonFormater/jsonFormater.css">
<script src="
http://cdn.bootcss.com/jquery/2.0.0/jquery.js"></script>
<script src="
http://cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.js"></script>
<script src="../lib/jsonFormater/jsonFormater.js"></script>
<script src="../../angular-1.4.5/angular.js"></script>
<script src="app.js"></script>
<style>
.outer-index {
color: #FF0000;
background-color: #f8f8f8;
padding: 3px;
border-radius: 6px;
}
.inner-index {
color: #00AA00;
background-color: #f8f8f8;
padding: 3px;
border-radius: 6px;
}
</style>
</head>
<body>
<div class="container-fluid" ng-controller="AppController as vm">
<div class="row">
<div class="col-md-6">
<ul class="list-group" ng-repeat="item in vm.appData" ng-init="outerIndex = $index">
<h3>{{item.name}}<span class="outer-index">outerIndex:{{outerIndex}}</span></h3>
<h4>{{item.author}}</h4>
<li class="list-group-item">
<ul class="list-group">
<li class="list-group-item" ng-repeat="v in item.books track by $index" ng-init="innerIndex = $index">
{{v.name}} <span class="inner-index">innerIndex:{{innerIndex}}</span><button class="btn btn-danger" ng-click="vm.removeItem(outerIndex, innerIndex)">å é¤</button>
</li>
<li class="list-group-item">
<form class="form-inline">
<input class="form-control" ng-model="vm.tempItem[$index]" type="text">
<button class="btn btn-primary" ng-click="vm.addItem(outerIndex)">æ·»å ä¸é¡¹</button>
</form>
</li>
</ul>
</li>
<hr ng-show="!$last">
</ul>
</div>
<div id="show-container" class="col-md-6">
<h3>vm.appData:</h3>
<div id="json-container"></div>
</div>
</div>
</div>
</body>
JavaScripté¨å
(function() {
angular.module('app', [])
.controller('AppController', AppController);
AppController.$inject = ['$scope'];
function AppController($scope) {
var vm = this;
// åå§ååå§æ°æ®
var appData = [
{
name: 'C++ä»å
¥é¨å°æ¾å¼',
author: 'dreamapple',
books: [
{name: 'github'},
{name: 'google'},
{name: 'nodejs'},
{name: 'react'}
]
},
{
name: 'Javaä»å
¥é¨å°è·è·¯',
author: 'åµåµå',
books: [
{name: 'éªç¢§'},
{name: 'ç¾äºå¯ä¹'},
{name: '鸡尾é
'}
]
}
];
vm.appData = appData;
vm.tempItem = [];
vm.addItem = addItem;
vm.removeItem = removeItem;
config();
function addItem(outerIndex) {
if(vm.tempItem[outerIndex]) {
vm.appData[outerIndex].books.push({
name: vm.tempItem[outerIndex]
});
vm.tempItem[outerIndex] = '';
vm.jf.doFormat(vm.appData);
}
else {
alert('æ·»å 项ä¸è½ä¸ºç©º!')
}
}
function removeItem(outerIndex, innerIndex) {
vm.appData[outerIndex].books.splice(innerIndex, 1);
vm.jf.doFormat(vm.appData);
}
function config() {
var options = {
dom : '#json-container',
tabSize: 2,
quoteKeys: true,
imgCollapsed: "../lib/jsonFormater/images/collapsed.gif",
imgExpanded: "../lib/jsonFormater/images/expanded.gif",
isCollapsible: true
};
vm.jf = new JsonFormater(options);
vm.jf.doFormat(vm.appData);
}
}
})();