原文地址:http://yeoman.io/codelab/write-app.html

创建一个新的模板来显示一个todo的列表

打开views/main.html

为了从一个干净的模板开始,删除main.html中div中所有的元素 ,并且把class属性“jumbotron”改成"container"。

现在main.html现在如下图所示

<div class="container">
</div>

打开scritps/controllers/main.js

修改已有的Angular控制器,添加一个todos来代替awesomeThings

'use strict';

angular.module('mytodoApp')
.controller('MainCtrl', function ($scope) {
$scope.todos = ['Item 1', 'Item 2', 'Item 3'];
});

之后修改我们的视图(main.html)来输出我们的todos内容

<div class="container">
<h2>My todos</h2>
<p class="form-group" ng-repeat="todo in todos">
<input type="text" ng-model="todo" class="form-control">
</p>
</div>

这个ng-repeat属性是一个Angular指令,可以实例化集合中的每一个元素。

在我们的例子中,每个段落元素和内容通过ng-repeat被转换为虚拟的占位符。对每一个todos元素,Angular将会输出一个新的<p><input></p>的html块。

这个ng-model属性是另一个Angular指令,对input,select,textarea有效,并且用户指令会显示一个双向绑定。在我们的例子中,它存在与字块input节点中。

让我们看看ng-repeat和ng-model在浏览器里的显示

手动更新$scope.todos的内容

$scope.todos = ['Item 1', 'Item 2', 'Item 3', 'Item 4'];

由于实时读取功能,你将看到这些列表

手动删除第四个元素,再看看浏览器的内容

添加一个todo

让我们为用户提供一个添加todo的方法

更改main.html,在<h2>和<p>添加一个<form>元素,你的main.html像下面这样。

<div class="container">
<h2>My todos</h2> <!-- Todos input -->
<form role="form" ng-submit="addTodo()">
<div class="row">
<div class="input-group">
<input type="text" ng-model="todo" placeholder="What needs to be done?" class="form-control">
<span class="input-group-btn">
<input type="submit" class="btn btn-primary" value="Add">
</span>
</div>
</div>
</form> <!-- Todos list -->
<p class="form-group" ng-repeat="todo in todos">
<input type="text" ng-model="todo" class="form-control">
</p>
</div>

这会添加一个带有提交按钮的form元素,ng-submit是另一个Angular指令。返回你的浏览器,这个界面会如下显示

如果你现在点击Add按钮,什么事情都不会发生,让我们来修改他

ng-submit绑定Angular表达式来提交form的事件,如果没有实践属性添加到form中,它会阻止默认的浏览器行为。在我们的例子中,我们会添加一个Angular表达式,addTodo()

下面的addTodo()方法将新的todo元素添加到todos列表中,然后清除输入栏的字段

$scope.addTodo = function () {
$scope.todos.push($scope.todo);
$scope.todo = '';
};

在main.js中添加addTodo()方法,并且添加MainCtrl控制器,你的控制器代码如下所示

'use strict';

angular.module('mytodoApp')
.controller('MainCtrl', function ($scope) {
$scope.todos = ['Item 1', 'Item 2', 'Item 3'];
$scope.addTodo = function () {
$scope.todos.push($scope.todo);
$scope.todo = '';
};
});

在浏览器看一下应用程序

删除一个todo

现在添加一个删除todo的方法,我们需要在每个元素后添加一个新的remove按钮。

让我们打开main.html,在ng-repeat指令中添加一个按钮。为了漂亮的展示输入框和删除按钮,改变class内容从"form-group"为"input-group"。

之前的标记

<!-- Todos list -->
<p class="form-group" ng-repeat="todo in todos">
<input type="text" ng-model="todo" class="form-control">
</p>

新的标记

<!-- Todos list -->
<p class="input-group" ng-repeat="todo in todos">
<input type="text" ng-model="todo" class="form-control">
<span class="input-group-btn">
<button class="btn btn-danger" ng-click="removeTodo($index)" aria-label="Remove">X</button>
</span>
</p>

再看看你的浏览器,你的todo应用看起来如下

我们看一下上面的Angular指令,当一个元素被点击后,ng-click会允许用户的行为。在这种情况下,我们调用removeTodo()方法并且传输$index给方法。

$index值将会获取当前todo元素的的ng-repeat元素中的元素。

现在在控制器中添加,删除todo的逻辑。下面的removeTodo()方法从元素列表中删除相应元素,使用JavaScript中的splice()方法删除$index相应的值

$scope.removeTodo = function (index) {
$scope.todos.splice(index, );
};

新的main.js如下

'use strict';

angular.module('mytodoApp')
.controller('MainCtrl', function ($scope) {
$scope.todos = ['Item 1', 'Item 2', 'Item 3'];
$scope.addTodo = function () {
$scope.todos.push($scope.todo);
$scope.todo = '';
};
$scope.removeTodo = function (index) {
$scope.todos.splice(index, );
};
});

返回浏览器,你能点击X按钮删除相应的元素

使用Yeoman搭建 AngularJS 应用 (8) —— 让我们搭建一个网页应用的更多相关文章

  1. 使用Yeoman搭建 AngularJS 应用 (12) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/local-storage.html 安装Bower程序包 我们使用另一个Angular模块,"angular-local-sto ...

  2. 使用Yeoman搭建 AngularJS 应用 (5) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/scaffold-app.html 基架 (Scaffolding) 在Yeoman中的意思是为基于你特殊的配置需求,为网站程序生成文件的工 ...

  3. 使用Yeoman搭建 AngularJS 应用 (4) —— 让我们搭建一个网页应用

    在开发一个的网页传统工作流程中,你需要大量的时间去设置引用文件,下载依赖文件,并且手动的创建网页文件结构.Yeoman生成器将会帮助你完成这些.让我们安装一个AngularJS项目的生成器. 安装An ...

  4. 使用Yeoman搭建 AngularJS 应用 (2) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/index.html 使用Yeoman搭建简单的应用 今天将会搭建一个简单的网页程序.你将可以添加,删除,拖拽和保存. 浏览Yeoman Y ...

  5. 使用Yeoman搭建 AngularJS 应用 (11) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/prepare-production.html 让我们发布这个应用 优化产品的文件 为了创建应用的产品版本,我们想做如下的事情 检查你的代码 ...

  6. 使用Yeoman搭建 AngularJS 应用 (10) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/write-unit-tests.html 对于不熟悉的Karma的人来说,这是JavaScript测试框架,这个Angular的生成器包含 ...

  7. 使用Yeoman搭建 AngularJS 应用 (9) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/install-packages.html 列出当前程序包 我们现在查看一下我们已经安装的程序包,输入下面的命令 bower list 查找 ...

  8. 使用Yeoman搭建 AngularJS 应用 (7) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/preview-inbrowser.html 开启你的服务 运行Grunt任务,通过输入下面的命令来创建一个本地Node的http服务,地址 ...

  9. 使用Yeoman搭建 AngularJS 应用 (6) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/review-generated-files.html 打开mytodo文件夹,你会看到现在的基架.如下图所示 在mytodo文件夹,我们能 ...

随机推荐

  1. 【转】Nginx模块开发入门

    转自: http://kb.cnblogs.com/page/98352/ 结论:对Nginx模块开发入门做了一个helloworld的示例,简单易懂.也有一定的深度.值得一看. Nginx模块开发入 ...

  2. 执行asp.net上传下载Excel时出现“未在本地计算机上注册“Microsoft.ACE.Oledb.12.0”提供程序。(System.Data)”错误

    服务器没有安装Office导致的错误,如何不想安装庞大的Office,可以下载安装: Microsoft Office Access Database Engine 2007 http://downl ...

  3. Java - 正则表达式常用操作

    验证 简单验证 String regex = "\\d{4}-\\d{2}-\\d{2}"; String input = "2016-01-01"; asse ...

  4. MongoDB - Introduction to MongoDB, Capped Collections

    Overview Capped collections are fixed-size collections that support high-throughput operations that ...

  5. 【AngularJs】---"Error: [ng:areq] Argument 'fn' is not a function, got undefined"

    项目中把controller.service抽取出来 一步一步没有报错 index那里加 <script src="js/controllers/XXController.js&quo ...

  6. HTTP相关知识 --转载

    转载之,言简意赅

  7. 一个简单的Redis结合Spring MVC架构以及实现过程

    为了加快开发人员对公司项目的理解.更加容易入手和对公司项目的整体把控. 整体框架 首先介绍公司项目的整体框架,闲话少说,直接上图 整体性能分析 这就是公司的一个整体的架构,为了开发人员对架构的侧重点的 ...

  8. ckrule规则编辑器在wpf中的使用

    当前,ckrule的IDE和业务管理系统都是由winform开发的,规则编辑器也只提供了winform的版本,所以很多的朋友都提出意见,要有wpf的版本.wpf的界面设置和管理都更加的方便. 事实上可 ...

  9. c#基础汇总-------------封装

    说到封装,其实是比较基础类的问题,它为程序设计提供了系统与系统,模块与模块,类与类之间交互的实现手段.在.Net中,一切看起来都已经被包装在.Net FrameWork这一复杂的网络中,提供给最终开发 ...

  10. Kernel Panic常见原因以及解决方法

    Technorati 标签: Kernel Panic 出现原因 1. Linux在中断处理程序中,它不处于任何一个进程上下文,如果使用可能睡眠的函数,则系统调度会被破坏,导致kernel panic ...