AngularJS学习--- AngularJS中的模板template和迭代器过滤filter step2 step3
1.AngularJS 模板---step2:
mvc(Model-View-Controller)模式在后端用的比较多,在前端也是一样的常用;
在AngularJS中,一个视图是模型通过HTML模板渲染之后的映射。这意味着,不论model什么时候发生变化,AngularJS会实时更新结合点,随之更新视图。
切换分支,启动项目:
git checkout step-2
npm start
效果:
app/index.html代码:
<!doctype html>
<html lang="en" ng-app="phonecatApp">
<head>
<meta charset="utf-8">
<title>Google Phone Gallery</title>
<link rel="stylesheet" href="../bower_components/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" href="css/app.css">
<script src="../bower_components/angular/angular.js"></script>
<script src="js/controllers.js"></script>
</head>
<body ng-controller="PhoneListCtrl"> <ul>
<li ng-repeat="phone in phones">
{{phone.name}}
<p>{{phone.snippet}}</p>
</li>
</ul> </body>
</html>
注:1).ng-repeat="phone in phones",这里phones是一个数组,phone 为我们自定义的变量名,in表示在...中进行遍历.
2).迭代器告诉AngularJS用第一个<li>
标签作为模板为列表中的每一部phone创建一个<li>
元素,其中phone.name和phone.snippet是phone的属性.
3).PhoneListCtrl中已经设置好了对于相关数据模型引用.
其中数据源为json格式:
'use strict'; /* Controllers */ var phonecatApp = angular.module('phonecatApp', []); phonecatApp.controller('PhoneListCtrl', function($scope) {
$scope.phones = [
{'name': 'Nexus S',
'snippet': 'Fast just got faster with Nexus S.'},
{'name': 'Motorola XOOM™ with Wi-Fi',
'snippet': 'The Next, Next Generation tablet.'},
{'name': 'MOTOROLA XOOM™',
'snippet': 'The Next, Next Generation tablet.'}
];
});
其控制过程如下所示:
关于作用域scope:
一个作用域可以视作模板、模型和控制器协同工作的粘接器。
模型和视图相互作用,相互影响就是scope在起作用,保证了两者同步.
测试:
amosli@amosli-pc:~/develop/angular-phonecat$ npm test > angular-phonecat@0.0.0 pretest /home/amosli/develop/angular-phonecat
> npm install > angular-phonecat@0.0.0 postinstall /home/amosli/develop/angular-phonecat
> bower install > angular-phonecat@0.0.0 test /home/amosli/develop/angular-phonecat
> karma start test/karma.conf.js WARN [plugin]: Cannot find plugin "karma-firefox-launcher".
Did you forget to install it ?
npm install karma-firefox-launcher --save-dev
WARN [karma]: Port 9876 in use
INFO [karma]: Karma v0.10.10 server started at http://localhost:9877/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 34.0.1847 (Linux)]: Connected on socket 8N3ux_ticB-j4K9ZbphZ
Chrome 34.0.1847 (Linux): Executed 1 of 1 SUCCESS (0.32 secs / 0.04 secs)
2.迭代器过滤filter---step3
切换分支,启动项目:
git checkout step-3
npm start
效果:
输入xoo:
app/index.html代码:
<div class="container-fluid">
<div class="row">
<div class="col-md-2">
<!--Sidebar content--> Search: <input ng-model="query"> </div>
<div class="col-md-10">
<!--Body content--> <ul class="phones">
<li ng-repeat="phone in phones | filter:query">
{{phone.name}}
<p>{{phone.snippet}}</p>
</li>
</ul> </div>
</div>
</div>
注:1).数据绑定: 这是AngularJS的一个核心特性。当页面加载的时候,AngularJS会根据输入框的属性值名字,将其与数据模型中相同名字的变量绑定在一起,以确保两者的同步性。
2).这里主要用到的是filter函数来控制数据的同步,其使用方法如下:
Usage
In HTML Template Binding
{{ filter_expression | filter : expression : comparator}}
In JavaScript
$filter('filter')(array, expression, comparator)
这里可以查看https://docs.angularjs.org/api/ng/filter/filter 关于filter的用法.
3).用户在输入框中输入的数据名字称作query
,会立刻作为列表迭代器(phone in phones | filter:
query`)其过滤器的输入。当数据模型引起迭代器输入变化的时候,迭代器可以高效得更新DOM将数据模型最新的状态反映出来。
测试:
amosli@amosli-pc:~/develop/angular-phonecat$ npm run protractor > angular-phonecat@0.0. preprotractor /home/amosli/develop/angular-phonecat
> npm run update-webdriver > angular-phonecat@0.0. preupdate-webdriver /home/amosli/develop/angular-phonecat
> npm install > angular-phonecat@0.0. postinstall /home/amosli/develop/angular-phonecat
> bower install > angular-phonecat@0.0. update-webdriver /home/amosli/develop/angular-phonecat
> webdriver-manager update selenium standalone is up to date.
chromedriver is up to date. > angular-phonecat@0.0. protractor /home/amosli/develop/angular-phonecat
> protractor test/protractor-conf.js ------------------------------------
PID: (capability: chrome #)
------------------------------------ Using ChromeDriver directly...
. Finished in 3.411 seconds
test, assertions, failures
如果测试中出现问题,那么可以尝试以下两个命令:
npm install
npm run update-webdriver #更新驱动
AngularJS学习--- AngularJS中的模板template和迭代器过滤filter step2 step3的更多相关文章
- AngularJS学习--- AngularJS中模板链接和图像 ng-src step6
接上一篇文章,本文将主要介绍angularjs中的模板链接,和图像显示? 首先,切换分支,启动项目: git checkout step- npm start 1.效果 相较于前一篇文章,明显感觉多了 ...
- Tornado框架中视图模板Template的使用
上文的程序中有这样一段: class MessageHandler(tornado.web.RequestHandler): def get(self): self.write(''' <htm ...
- AngularJS学习--- AngularJS中数据双向绑定(two-way data-binding) orderBy step4
1.切换工作目录 git checkout step- #切换分支,切换到第4步 npm start #启动项目 2.代码 app/index.html Search: <input ng-mo ...
- AngularJS学习--- AngularJS中XHR(AJAX)和依赖注入(DI) step5
前言:本文接前一篇文章,主要介绍什么是XHR,AJAX,DI,angularjs中如何使用XHR和DI. 1.切换工具目录 git checkout -f step- #切换分支 npm start ...
- Angularjs学习---angularjs环境搭建,ubuntu 12.04下安装nodejs、npm和karma
1.下载angularjs 进入其官网下载:https://angularjs.org/,建议下载最新版的:https://ajax.googleapis.com/ajax/libs/angular ...
- angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...
- Angularjs学习---ubuntu12.04中karma安装配置
Angularjs学习---ubuntu12.04中karma安装配置中常见的问题总结 karma启动时出现了很多问题: 1.安装karma前提条件 安装karma首先要安装nodejs,npm然 ...
- Angularjs学习---ubuntu12.04中karma安装配置中常见的问题总结
karma启动时出现了很多问题: 1.安装karma前提条件 安装karma首先要安装nodejs,npm然后才可以安装karma.nodejs,npm的安装过程可以参考文章:Angularjs学习- ...
- 深入学习AngularJS中数据的双向绑定机制
来自:http://www.jb51.net/article/80454.htm Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持 ...
随机推荐
- Document types require more than xhtml1.0
这个东西只会在比较低版本的浏览器中会出现,比如IE7及以下会出这个错误. 错误的根源是html页面没有考虑浏览器兼容性问题. 在页面头部加入下面的内容即可解决标题中的问题 <!DOCTYPE h ...
- Delphi下16进制位图数据转位图
如果我们在Form中拖入一个Image控件,并设置好picture后,Alt+F12就可以看到Form的源代码中已经将图片转成了16进制字符串,如下: ? 1 2 3 4 5 6 7 8 9 10 1 ...
- 使用lipo 查看静态库命令
lipo -info .a 的: find . -name *.a -exec lipo -info "{}" \; framework 的: find . -name *.fra ...
- 黄聪:PHP页面跳转如何实现延时跳转
php在用header重定向的时候,可以设置下延时跳转,代码如下: header("Refresh:5;url=index.php");
- Linux6(5)安装Oracle Rac11g
1.创建用户组.以root身份运行以下命令:/usr/sbin/groupadd -g 501 oinstall /usr/sbin/groupadd -g 502 dba /usr/sbin/gro ...
- hihocoder 1391 [扫描线]
/* 题意: 两方对阵,互发导弹.防护罩可以让导弹原速反向. 每一枚导弹有发射时间航行时间伤害值. 防护罩也有开启时间和防御时间. 其中一方防护罩开启时间已知,求另一方防护罩合理安排开启时间使得己方受 ...
- Extjs 4.2 Grid增删改及后台交互(Java)
上次发了Easyui Datagrid的增删改查的使用学习记录后一直想整理下基于Extjs4.2的Grid学习使用记录.苦于抽不出时间,一直拖到现在.不得不说,Extjs确实很强大,新版的Neptun ...
- c/c++运算顺序问题
发现没弄清楚这个问题的人很多,连我们c++老师都没弄清楚,转载一篇文章,以及C++ Primer原文. 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句 ...
- delphi 怎么获取工程版本号
function GetApplicationVersion:String; // Added 取得程序版本号 var FileName:String; InfoSize,Wnd:DWORD; Ver ...
- Mybatis 插入null值报错
解决方法: 1.在settings中配置 <setting name="jdbcTypeForNull" value="OTHER"/> MyBat ...