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中函数声明优先于变量声明的实例分析
Mar 01 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
Nov 19 Javascript
JavaScript的9种继承实现方式归纳
May 18 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
AngularJS的表单使用详解
Jun 17 Javascript
三分钟带你玩转jQuery.noConflict()
Feb 15 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 Javascript
Javascript Event(事件)的传播与冒泡
Jan 23 Javascript
详解JS中遍历语法的比较
Apr 07 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
Jun 21 Javascript
Vue实现移动端左右滑动效果的方法
Nov 27 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
php上传大文件设置方法
2016/04/14 PHP
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
vue实现简单全选和反选功能
2020/09/15 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
python psutil库安装教程
2018/03/19 Python
Python高级用法总结
2018/05/26 Python
python读取LMDB中图像的方法
2018/07/02 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
为什么说python更适合树莓派编程
2020/07/20 Python
利用python 读写csv文件
2020/09/10 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
美容师的职业规划书
2013/12/27 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
本科生就业推荐信
2014/05/19 职场文书
服装设计专业自荐信
2014/06/17 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
东京审判观后感
2015/06/01 职场文书
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript