简单理解src和ng-src
2017-07-12 11:06
92 查看
作者:徐海峰
链接:https://www.zhihu.com/question/48128981/answer/109289707
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
src 是 HTML的属性,{{}} 是 ng 的表达式, 表达式可用于很多地方,包含属性,所以直接 src="{{vm.url}}" 其实就是使用ng的表达式给属性赋值,这种做法的缺点是当第一次加载模板的时候浏览器会去请求 “{{vm.url}}” 的地址,当ng编译模板后把 {{vm.url}} 替换成对应的URL后会再次请求真实的地址,所以为了避免第一次无效的请求,ng 自带了ngSrc 指令,其实和ngHref的原理类似。
想要探索为啥直接写 ng-src=“vm.url” 不行就需要看文档或者源码:
angular.js/attrs.js at master · angular/angular.js · GitHub
因为 ng-src 指令是直接 $observe 'ng-src' 的,所以必须是表达式,如果写成 `ng-src=“vm.url”` 指令会生成 src=“vm.url”
如果想要支持,把ngSrc指令改成下面这样就可以了
知道原理后如果你就不想多写{{}} 那就自定义指令 xxxSrc 改造下就可以了。
简单的说:
1、资源url是个常量,那么就用src,没毛病;
2、资源url是个(包含)变量,那么就用ng-src + {{}},可以规避第一次请求404的问题。
链接:https://www.zhihu.com/question/48128981/answer/109289707
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
src 是 HTML的属性,{{}} 是 ng 的表达式, 表达式可用于很多地方,包含属性,所以直接 src="{{vm.url}}" 其实就是使用ng的表达式给属性赋值,这种做法的缺点是当第一次加载模板的时候浏览器会去请求 “{{vm.url}}” 的地址,当ng编译模板后把 {{vm.url}} 替换成对应的URL后会再次请求真实的地址,所以为了避免第一次无效的请求,ng 自带了ngSrc 指令,其实和ngHref的原理类似。
想要探索为啥直接写 ng-src=“vm.url” 不行就需要看文档或者源码:
angular.js/attrs.js at master · angular/angular.js · GitHub
因为 ng-src 指令是直接 $observe 'ng-src' 的,所以必须是表达式,如果写成 `ng-src=“vm.url”` 指令会生成 src=“vm.url”
attr.$observe('ng-src',function(value){ attr.$set(name, value); })
如果想要支持,把ngSrc指令改成下面这样就可以了
scope.$watch(attr[normalized], function(value) { ... });
知道原理后如果你就不想多写{{}} 那就自定义指令 xxxSrc 改造下就可以了。
简单的说:
1、资源url是个常量,那么就用src,没毛病;
2、资源url是个(包含)变量,那么就用ng-src + {{}},可以规避第一次请求404的问题。
相关文章推荐
- AngularJS基础 ng-src 指令简单示例
- Castle- Startable Facility 简单理解
- .Net 应用程序与进程的简单理解
- 简单的理解 类的继承 和 多态性
- 工厂方法的简单理解
- 用CMP访问数据库,简单的,但不理解为什么URL不修改仍然可以运行
- 简单理解asp.net 2.0 三层开发
- 打破沙锅——AOP简单理解
- 分布式应用程序结构简单理解
- 简单理解一下机会成本
- 关于DataRow和DataColumn的一点个人简单理解
- 学习计划, -VB delphi 进行简单的编程理解
- 分布式应用程序结构简单理解
- c# interface 的理解(工厂模式)简单实例
- Javascript原型的简单理解
- MFC 消息处理的简单理解
- 事件处理的简单理解
- JSP-一个理解MVC架构的简单的登陆、注册例子
- Computer.硬盘:简单理解磁盘的物理结构
- 简单工厂模式和抽象工厂模式的通俗理解