AngularJS入门教程之链接与图片模板详解


Posted in Javascript onAugust 19, 2016

这一步,你会为手机列表的手机添加缩略图以及一些链接,不过这些链接还不会起作用。接下来你会使用这些链接来分类显示手机的额外信息。

请重置工作目录:

git checkout -f step-6

现在你应该能够看到列表里面手机的图片和链接了。

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

数据

注意到现在phones.json文件包含了唯一标识符和每一部手机的图像链接。这些url现在指向app/img/phones/目录。

app/phones/phones.json(样例片段)

[
 {
 ...
 "id": "motorola-defy-with-motoblur",
 "imageUrl": "img/phones/motorola-defy-with-motoblur.0.jpg",
 "name": "Motorola DEFY\u2122 with MOTOBLUR\u2122",
 ...
 },
...
]

模板

app/index.html

...
    <ul class="phones">
     <li ng-repeat="phone in phones | filter:query | orderBy:orderProp" class="thumbnail">
      <a href="#/phones/{{phone.id}}" class="thumb"><img ng-src="{{phone.imageUrl}}"></a>
      <a href="#/phones/{{phone.id}}">{{phone.name}}</a>
      <p>{{phone.snippet}}</p>
     </li>
    </ul>
...

这些链接将来会指向每一部电话的详细信息页。不过现在为了产生这些链接,我们在href属性里面使用我们早已熟悉的双括号数据绑定。在步骤2,我们添加了{{phone.name}}绑定作为元素内容。在这一步,我们在元素属性中使用{{phone.id}}绑定。

我们同样为每条记录添加手机图片,只需要使用ngSrc指令代替<img>的src属性标签就可以了。如果我们仅仅用一个正常src属性来进行绑定(<img class="diagram" src="{{phone.imageUrl}}">),浏览器会把AngularJS的{{ 表达式 }}标记直接进行字面解释,并且发起一个向非法urlhttp://localhost:8000/app/{{phone.imageUrl}}的请求。因为浏览器载入页面时,同时也会请求载入图片,AngularJS在页面载入完毕时才开始编译——浏览器请求载入图片时{{phone.imageUrl}}还没得到编译!有了这个ngSrc指令会避免产生这种情况,使用ngSrc指令防止浏览器产生一个指向非法地址的请求。

测试

test/e2e/scenarios.js

...
  it('should render phone specific links', function() {
   input('query').enter('nexus');
   element('.phones li a').click();
   expect(browser().location().url()).toBe('/phones/nexus-s');
  });
...

我们添加了一个新的端到端测试来验证应用为手机视图产生了正确的链接,上面就是我们的实现。

你现在可以刷新你的浏览器,并且用端到端测试器来观察测试的运行,或者你可以在AngularJS服务器上运行它们。

练习

将ng-src指令换成普通的src属性。用像Firebug,Chrome Web Inspector这样的工具,或者直接去看服务器的访问日志,你会发现你的应用向/app/%7B%7Bphone.imageUrl%7D%7D(或者/app/{{phone.imageUrl}})发送了一个非法请求。

这个问题是由于浏览器会在遇到img标签的时候立刻向还未得到编译的URL地址发送一个请求,AngularJS只有在页面载入完毕后才开始编译表达式从而得到正确的图片URL地址。

总结

如今你已经添加了手机图片和链接,转到步骤7,我们将学习AngularJS的布局模板以及AngularJS是如何轻易地为应用提供多重视图。

 以上就是对AngularJS 链接与图片模版的资料整理,后续继续补充相关知识,谢谢大家对本站的支持!

Javascript 相关文章推荐
取键盘键位ASCII码的网页
Jul 30 Javascript
实现连缀调用的map方法(prototype)
Aug 05 Javascript
input的focus方法使用
Mar 13 Javascript
js中的this关键字详解
Sep 25 Javascript
含有CKEditor的表单如何提交
Jan 09 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
weui框架实现上传、预览和删除图片功能代码
Aug 24 Javascript
axios拦截设置和错误处理方法
Mar 05 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
Apr 12 jQuery
Vue实现用户自定义字段显示数据的方法
Aug 28 Javascript
Vue对象赋值视图不更新问题及解决方法
Jun 03 Javascript
AngularJS之依赖注入模拟实现
Aug 19 #Javascript
AngularJS入门教程之XHR和依赖注入详解
Aug 18 #Javascript
JavaScript中函数声明与函数表达式的区别详解
Aug 18 #Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 #Javascript
AngularJS入门教程之双向绑定详解
Aug 18 #Javascript
AngularJS入门教程之迭代器过滤详解
Aug 18 #Javascript
AngularJS入门教程之AngularJS 模板
Aug 18 #Javascript
You might like
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
PHP 程序授权验证开发思路
2009/07/09 PHP
php中对2个数组相加的函数
2011/06/24 PHP
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
ScrollDown的基本操作示例
2013/06/09 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
微信小程序radio组件使用详解
2018/01/31 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
举例讲解Python中的算数运算符的用法
2015/05/13 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
对python的文件内注释 help注释方法
2018/05/23 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
出纳岗位职责模板
2013/11/27 职场文书
公司承诺书范文
2014/05/19 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
2015年班组长工作总结
2015/04/10 职场文书
销售开票员岗位职责
2015/04/15 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL