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 相关文章推荐
js压缩工具 yuicompressor 使用教程
Mar 31 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
Oct 22 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
Nov 24 Javascript
给before和after伪元素设置js效果的方法
Dec 04 Javascript
Node.js 中exports 和 module.exports 的区别
Mar 14 Javascript
bootstrap table动态加载数据示例代码
Mar 25 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
Nov 24 Javascript
vue按需加载组件webpack require.ensure的方法
Dec 13 Javascript
微信小程序版本自动更新的方法
Jun 14 Javascript
layer实现弹出层自动调节位置
Sep 05 Javascript
微信小程序实现拖拽功能
Sep 26 Javascript
vue-element-admin项目导入和导出的实现
May 21 Vue.js
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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
php 生成短网址原理及代码
2014/01/23 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
Javascript复制实例详解
2016/01/28 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
对python中的argv和argc使用详解
2018/12/15 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
python打造爬虫代理池过程解析
2019/08/15 Python
python软件都是免费的吗
2020/06/18 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
创建市级文明单位实施方案
2014/03/01 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
停电通知范文
2015/04/16 职场文书
朋友聚会开场白
2015/06/01 职场文书
《司马光》教学反思
2016/02/22 职场文书
小数乘法教学反思
2016/02/22 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS