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 返回时间戳所对应的具体时间
Jul 20 Javascript
js关闭父窗口时关闭子窗口
Apr 01 Javascript
javascript删除数组元素并且数组长度减小的简单实例
Feb 14 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
Apr 12 Javascript
分享javascript实现的冒泡排序代码并优化
Jun 05 Javascript
Vue.js仿Metronic高级表格(一)静态设计
Apr 17 Javascript
利用node.js本地搭建HTTP服务器
Apr 19 Javascript
Vue按需加载的具体实现
Dec 02 Javascript
vue2.0 资源文件assets和static的区别详解
Apr 08 Javascript
vue+element导航栏高亮显示的解决方式
Nov 12 Javascript
vue3自定义dialog、modal组件的方法
Jan 04 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
PHP 学习路线与时间表
2010/02/21 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
2017/09/08 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
python time模块用法实例详解
2014/09/11 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
Python格式化日期时间操作示例
2018/06/28 Python
django如何连接已存在数据的数据库
2018/08/14 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
python 实现波浪滤镜特效
2020/12/02 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
美国紧身牛仔裤品牌:NYDJ
2017/05/24 全球购物
优纳科技软件测试面试题
2012/05/15 面试题
物业管理计划书
2014/01/10 职场文书
语文教育专业求职信
2014/06/28 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
小学教师工作总结2015
2015/04/07 职场文书
Python使用Web框架Flask开发项目
2022/06/01 Python