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

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

打开views/main.html

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

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

  1. <div class="container">
  2. </div>

打开scritps/controllers/main.js

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

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

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

  1. <div class="container">
  2. <h2>My todos</h2>
  3. <p class="form-group" ng-repeat="todo in todos">
  4. <input type="text" ng-model="todo" class="form-control">
  5. </p>
  6. </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的内容

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

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

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

添加一个todo

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

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

  1. <div class="container">
  2. <h2>My todos</h2>
  3.  
  4. <!-- Todos input -->
  5. <form role="form" ng-submit="addTodo()">
  6. <div class="row">
  7. <div class="input-group">
  8. <input type="text" ng-model="todo" placeholder="What needs to be done?" class="form-control">
  9. <span class="input-group-btn">
  10. <input type="submit" class="btn btn-primary" value="Add">
  11. </span>
  12. </div>
  13. </div>
  14. </form>
  15.  
  16. <!-- Todos list -->
  17. <p class="form-group" ng-repeat="todo in todos">
  18. <input type="text" ng-model="todo" class="form-control">
  19. </p>
  20. </div>

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

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

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

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

  1. $scope.addTodo = function () {
  2. $scope.todos.push($scope.todo);
  3. $scope.todo = '';
  4. };

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

  1. 'use strict';
  2.  
  3. angular.module('mytodoApp')
  4. .controller('MainCtrl', function ($scope) {
  5. $scope.todos = ['Item 1', 'Item 2', 'Item 3'];
  6. $scope.addTodo = function () {
  7. $scope.todos.push($scope.todo);
  8. $scope.todo = '';
  9. };
  10. });

在浏览器看一下应用程序

删除一个todo

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

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

之前的标记

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

新的标记

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

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

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

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

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

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

新的main.js如下

  1. 'use strict';
  2.  
  3. angular.module('mytodoApp')
  4. .controller('MainCtrl', function ($scope) {
  5. $scope.todos = ['Item 1', 'Item 2', 'Item 3'];
  6. $scope.addTodo = function () {
  7. $scope.todos.push($scope.todo);
  8. $scope.todo = '';
  9. };
  10. $scope.removeTodo = function (index) {
  11. $scope.todos.splice(index, );
  12. };
  13. });

返回浏览器,你能点击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. 省市联动Demo

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...

  2. 【Ionic】---AngularJS扩展基本布局

    目录: 标题栏 : ion-header-bar 页脚栏 : ion-footer-bar header/footer : 样式及内容 内容区 : ion-content 滚动框 : ion-scro ...

  3. MVC中提示错误:从客户端中检测到有潜在危险的 Request.Form 值的详细解决方法

    今天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&q ...

  4. python学习day3--python基础

    1.python不用声明变量的类型,运行时python自己进行判断 2.尽量不要用“+”去拼接字符串,运行时会每遇到一个“+”就开辟一块内存空间,使用如下方式进行字符串的拼接. msg=''' inf ...

  5. Session id实现通过Cookie来传输方法及代码参考

    1. Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.因此从上述的定义中我们可以看到,Session实际上是一个特定的 ...

  6. 返回页面,主页面不刷新window.history.go(-1),主页面刷新window.location.go(-1)

    返回上一页,不刷新 window.history.go(-1) 返回上一页,刷新 window.location.go(-1)

  7. javascript-对象的函数(一)

    Date.prototype.Format = function(fmt) { //author: meizz var o = { "M+" : this.getMonth()+1 ...

  8. encodeURIComponent=>Uri.EscapeDataString

    javascript: encodeURIComponent=> C#: Uri.EscapeDataString http://stackoverflow.com/questions/5754 ...

  9. 串操作,C++实现

    对串的基本操作都全已经实现 对kmp,kf字符串替换等功能全都已经实现 由于时间原因.没来得及注释,希望大家参考见谅. 串操作hstring.h头文件实现 //kallen 1 #ifndef _HS ...

  10. DTcms同一频道需要两种类型的列表模版思路

    放两个列表模版即可,两个模版下的内容都可以访问,同一个内容展示不同的模版,需要什么栏目,链接就写哪个. 对动态链接进行判断,选择 最终效果: 频道URL配置