AngularJS 入门教程之事件处理器详解


Posted in Javascript onAugust 19, 2016

在这一步,你会在手机详细信息页面让手机图片可以点击。

请重置工作目录:

git checkout -f step-10

手机详细信息视图展示了一幅当前手机的大号图片,以及几个小一点的缩略图。如果用户点击缩略图就能把那张大的替换成自己那就更好了。现在我们来看看如何用AngularJS来实现它。

步骤9和步骤10之间最重要的不同在下面列出。你可以在GitHub里看到完整的差别。

控制器

app/js/controllers.js

...
function PhoneDetailCtrl($scope, $routeParams, $http) {
 $http.get('phones/' + $routeParams.phoneId + '.json').success(function(data) {
 $scope.phone = data;
 $scope.mainImageUrl = data.images[0];
 });

 $scope.setImage = function(imageUrl) {
 $scope.mainImageUrl = imageUrl;
 }
}

//PhoneDetailCtrl.$inject = ['$scope', '$routeParams', '$http'];

在PhoneDetailCtrl控制器中,我们创建了mainImageUrl模型属性,并且把它的默认值设为第一个手机图片的URL。

模板

app/partials/phone-detail.html

<img ng-src="{{mainImageUrl}}" class="phone">

...

<ul class="phone-thumbs">
 <li ng-repeat="img in phone.images">
 <img ng-src="{{img}}" ng-click="setImage(img)">
 </li>
</ul>
...

我们把大图片的ngSrc指令绑定到mainImageUrl属性上。

同时我们注册一个ngClick处理器到缩略图上。当一个用户点击缩略图的任意一个时,这个处理器会使用setImage事件处理函数来把mainImageUrl属性设置成选定缩略图的URL。

测试

为了验证这个新特性,我们添加了两个端到端测试。一个验证主图片被默认设置成第一个手机图片。第二个测试点击几个缩略图并且验证主图片随之合理的变化。

test/e2e/scenarios.js

...
 describe('Phone detail view', function() {

...

 it('should display the first phone image as the main phone image', function() {
  expect(element('img.phone').attr('src')).toBe('img/phones/nexus-s.0.jpg');
 });

 it('should swap main image if a thumbnail image is clicked on', function() {
  element('.phone-thumbs li:nth-child(3) img').click();
  expect(element('img.phone').attr('src')).toBe('img/phones/nexus-s.2.jpg');

  element('.phone-thumbs li:nth-child(1) img').click();
  expect(element('img.phone').attr('src')).toBe('img/phones/nexus-s.0.jpg');
 });
 });
});

你现在可以刷新你的浏览器,然后重新跑一遍端到端测试,或者你可以在AngularJS的服务器上运行一下。

练习

为PhoneDetailCtrl添加一个新的控制器方法:

$scope.hello = function(name) {
  alert('Hello ' + (name || 'world') + '!');
 }

并且添加:

 <button ng-click="hello('Elmo')">Hello</button>

phone-details.html模板。

总结

现在图片浏览器已经做好了,我们已经为步骤11(最后一步啦!)做好了准备,我们会学习用一种更加优雅的方式来获取数据。

以上就是AngularJS 事件处理器的资料整理,后续继续补充,谢谢大家对本站的支持!

Javascript 相关文章推荐
javascript 面向对象编程基础:封装
Aug 21 Javascript
Javascript this 的一些学习总结
Aug 02 Javascript
Javascript代码在页面加载时的执行顺序介绍
May 03 Javascript
删除条目时弹出的确认对话框
Jun 05 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
Sep 09 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
Apr 04 jQuery
js匿名函数使用&amp;传参(实例)
Sep 08 Javascript
微信小程序云开发实现云数据库读写权限
May 17 Javascript
微信小程序如何自定义table组件
Jun 29 Javascript
vue-quill-editor的使用及个性化定制操作
Aug 04 Javascript
jQuery增加、删除及修改select option的方法
Aug 19 #Javascript
浅谈jquery设置和获得checkbox选中的问题
Aug 19 #Javascript
AngularJS入门教程之过滤器详解
Aug 19 #Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 #Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 #Javascript
js仿腾讯QQ的web登陆界面
Aug 19 #Javascript
基于WebUploader的文件上传js插件
Aug 19 #Javascript
You might like
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
详解Vite的新体验
2021/02/22 Javascript
python生成指定尺寸缩略图的示例
2014/05/07 Python
python中as用法实例分析
2015/04/30 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
Python中qutip用法示例详解
2020/10/02 Python
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
影视艺术学院毕业生自荐信
2013/11/13 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL