【发布时间】:2015-06-14 13:49:30
【问题描述】:
我对 Angular 非常陌生,从官方网站上的文档和使用 plunkr 我能够弄清楚如果我没有错的话,我们使用 ng-repeat 和 push 方法向 DOM 添加新的东西。
我正在尝试查看文档中的这个示例:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example - example-ngController-production</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
<!--<script src="app.js"></script>-->
<script>
angular.module('controllerAsExample', [])
.controller('SettingsController1', SettingsController1);
function SettingsController1() {
this.name = "John Smith";
this.contacts = [
{type: 'phone', value: '408 555 1212'},
{type: 'email', value: 'john.smith@example.org'}
];
}
SettingsController1.prototype.greet = function () {
alert(this.name);
};
SettingsController1.prototype.addContact = function () {
this.contacts.push({ value: ''});
};
SettingsController1.prototype.removeContact = function (contactToRemove) {
var index = this.contacts.indexOf(contactToRemove);
this.contacts.splice(index, 1);
};
SettingsController1.prototype.clearContact = function (contact) {
contact.type = 'phone';
contact.value = '';
};
</script>
</head>
<body ng-app="controllerAsExample">
<div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings">
<label>Name: <input type="text" ng-model="settings.name"/></label>
<button ng-click="settings.greet()">greet</button><br/>
Contact:
<ul>
<li ng-repeat="contact in settings.contacts">
<select ng-model="contact.type" aria-label="Contact method" id="select_{{$index}}">
<option>phone</option>
<option>email</option>
</select>
<input type="text" ng-model="contact.value" aria-labelledby="select_{{$index}}" />
<button ng-click="settings.clearContact(contact)">clear</button>
<button ng-click="settings.removeContact(contact)" aria-label="Remove">X</button>
</li>
<li><button ng-click="settings.addContact()">add</button></li>
</ul>
</div>
</body>
</html>
这是我理解的基本概述,但我无法弄清楚 ng-repeat 如何帮助我们添加新元素(推送新元素)。据我所见,它的行为就像 java 中的迭代器。
【问题讨论】:
-
您的实际问题是什么?您是否要求解释
ng-repeat的工作原理? -
基本上我想了解如何在提交时创建/添加文本框
-
您没有尝试在此代码中添加新的
textbox。您正在向contacts数组添加一个新元素,而 ng-repeat 又会为该数组生成一个<li>,其中恰好有一个select和一个textbox。 -
如果您一般来说要问为什么这确实有效,那么您可能应该更多地研究一下 Angular 中的 2 路绑定是如何工作的。
标签: angularjs