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 相关文章推荐
JS实现简单的键盘打字的效果
Apr 24 Javascript
jQuery电话号码验证实例
Jan 05 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 Javascript
微信小程序选择图片和放大预览图片功能
Nov 02 Javascript
vue单页开发父子组件传值思路详解
May 18 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
JavaScript创建对象的四种常用模式实例分析
Jan 11 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
Nov 01 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 Javascript
vue-cli3中配置alias和打包加hash值操作
Sep 04 Javascript
vue axios请求成功却进入catch的原因分析
Sep 08 Javascript
vue递归实现树形组件
Jul 15 Vue.js
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/04 咖啡文化
PHP实现的功能是显示8条基色色带
2006/10/09 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
Javascript基础教程之数组 array
2015/01/18 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
python 编写简单网页服务器的实例
2018/06/01 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
后勤自我鉴定
2013/10/13 职场文书
企业内控岗位的职责
2014/02/07 职场文书
科研课题实施方案
2014/03/18 职场文书
投标服务承诺书
2014/05/28 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL