AngularJS学习--- AngularJS中数据双向绑定(two-way data-binding) orderBy step4
2023-09-14 08:58:56 时间
1.切换工作目录
git checkout step-4 #切换分支,切换到第4步 npm start #启动项目
2.代码
app/index.html
Search: <input ng-model="query"> Sort by: <select ng-model="orderProp"> <option value="name">Alphabetical</option> <option value="age">Newest</option> </select> <ul class="phones"> <li ng-repeat="phone in phones | filter:query | orderBy:orderProp"> {{phone.name}} <p>{{phone.snippet}}</p> </li> </ul>
app/controllers.js
var phonecatApp = angular.module('phonecatApp', []); phonecatApp.controller('PhoneListCtrl', function($scope) { $scope.phones = [ {'name': 'Nexus S', 'snippet': 'Fast just got faster with Nexus S.', 'age': 1}, {'name': 'Motorola XOOM™ with Wi-Fi', 'snippet': 'The Next, Next Generation tablet.', 'age': 2}, {'name': 'MOTOROLA XOOM™', 'snippet': 'The Next, Next Generation tablet.', 'age': 3} ]; $scope.orderProp = 'age'; });
3.效果
按字母排序:
按时间排序:
很明显,相较于step-3,step-4新增加了排序功能
4.原理说明
首先,添加了<select>
标签:
<select ng-model="orderProp"> <option value="name">Alphabetical</option> <option value="age">Newest</option> </select>
其次,在filter中添加了orderBy:
<li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
{{phone.name}}
<p>{{phone.snippet}}</p>
</li>
所以,根据angularjs的思想,一是model改变(可能是用户手动选择下拉框导致的),那么根据数据绑定原则(data-binding),view也将适时进行改变.
orderBy api:https://docs.angularjs.org/api/ng/filter/orderBy
orderBy Usage(用法)
In HTML Template Binding(在HTML中的用法)
{{ orderBy_expression | orderBy : expression : reverse}}
In JavaScript(在JS中的用法)
$filter('orderBy')(array, expression, reverse)
上面的例子是在HTML中用的,默认string类型的数据是按照字母表中数据排序的,而number数字类型的数据是按照数字大小进行排序的.
如果想要倒序,那么可以在上面的option value='-name',加上一个'-'即可.
5.测试
amosli@amosli-pc:~/develop/angular-phonecat$ npm run protractor > angular-phonecat@0.0.0 preprotractor /home/amosli/develop/angular-phonecat > npm run update-webdriver > angular-phonecat@0.0.0 preupdate-webdriver /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 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.0 protractor /home/amosli/develop/angular-phonecat > protractor test/protractor-conf.js ------------------------------------ PID: 5265 (capability: chrome #1) ------------------------------------ Using ChromeDriver directly... .. Finished in 5.033 seconds 2 tests, 5 assertions, 0 failures
这里执行的是端到端的测试,测试代码如下:
angular-phonecat/test/e2e/scenarios.js
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
amosli@amosli-pc:~/develop/angular-phonecat/test/e2e$ cat scenarios.js 'use strict'; /* http://docs.angularjs.org/guide/dev_guide.e2e-testing */ describe('PhoneCat App', function() { describe('Phone list view', function() { beforeEach(function() { browser.get('app/index.html'); }); it('should filter the phone list as user types into the search box', function() { var phoneList = element.all(by.repeater('phone in phones')); var query = element(by.model('query')); expect(phoneList.count()).toBe(3); query.sendKeys('nexus'); expect(phoneList.count()).toBe(1); query.clear(); query.sendKeys('motorola'); expect(phoneList.count()).toBe(2); }); it('should be possible to control phone order via the drop down select box', function() { var phoneNameColumn = element.all(by.repeater('phone in phones').column('{{phone.name}}')); var query = element(by.model('query')); function getNames() { return phoneNameColumn.map(function(elm) { return elm.getText(); }); } query.sendKeys('tablet'); //let's narrow the dataset to make the test assertions shorter expect(getNames()).toEqual([ "Motorola XOOM\u2122 with Wi-Fi", "MOTOROLA XOOM\u2122" ]); element(by.model('orderProp')).findElement(by.css('option[value="name"]')).click(); expect(getNames()).toEqual([ "MOTOROLA XOOM\u2122", "Motorola XOOM\u2122 with Wi-Fi" ]); }); }); });
相关文章
- 5个时间序列预测的深度学习模型对比总结:从模拟统计模型到可以预训练的无监督模型(附代码)
- Pytroch入坑 3. 自己的人脸数据+迁移学习(resnet18)
- 2022最新JAVA学习路线(附面试题)
- MySQL数据库原理学习(十一)
- ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
- 机器学习入门 3-12 数据加载和简单的数据探索
- 机器学习中的交叉验证思想
- Python中用PyTorch机器学习神经网络分类预测银行客户流失模型|附代码数据
- 汇编学习(5),函数,栈帧
- Habitat Challenge 2022冠军方案:字节AI Lab提出融合传统和模仿学习的主动导航
- 数据挖掘机器学习[二]---汽车交易价格预测详细版本{EDA-数据探索性分析}
- 机器学习算法竞赛实战-数据探索
- 图灵奖得主Judea Pearl谈机器学习:不能只靠数据
- Spark学习笔记6:Spark调优与调试详解大数据
- 从使用到原理学习Java线程池详解编程语言
- HBase学习之路 (八)HBase大牛博客详解大数据
- 学习hadoop该去哪些网站,该读哪些书籍详解大数据
- MySQL教学视频:轻松获取学习资源(mysql教学视频下载)
- Java数据持久层框架 MyBatis之API学习八(Java API详解)编程语言
- [图]科学家研发新机器学习方法 更轻松洞察海量卫星地图数据
- 深度学习简明教程
- 学习MySQL:如何使用循环语句进行数据操作?(mysql怎么写循环)
- 从零开始学习大数据 Linux基础,打造数据时代的核心竞争力(大数据linux基础)
- MySQL详尽教程:深入学习数据库知识(mysql详细教程)
- 一步步学习如何在Redis中插入数据(redis插入数据)
- 学习C,把SSH和MySQL整合在一起(c# ssh mysql)
- 教程传智播客学习Redis,掌握实战视频教程(传智redis视频)
- JavaScriptEvent事件学习第一章Event介绍