ngSrc 是在 ngIf 导致不必要的 http 请求之前计算的
ngSrc is computed before ngIf causing unnecessary http request
当你写这样的东西时:
<img ng-if="image.name != null" ng-src="img/{{ image.name }}_img.png" />
如果image.name = null
Angular 将首先添加标签并评估 src。浏览器将发出 http 请求img/_img.png
wchich 不存在。然后angular 将在解析 ngIf 指令后删除标签。解决此问题的最简单方法是什么?我认为这是ngSrc和ngIf的完美用例。
编辑
在当前不稳定的 1.2.0-rc.2 中,问题已修复,一切都按预期工作。在当前稳定的 1.0.8 中,您甚至不能使用三元运算符。
您不需要 ng-if
指令。只需在表达式中执行三元运算符测试即可。类似的东西
<img ng-src="{{image.name?('img/'+ image.name +'_img.png'):null}}"/>
它应该有效。查看我的 plunker http://plnkr.co/edit/BWiGdO?p=preview
你可以用一个简单的指令来做到这一点。
这是 HTML :
<!DOCTYPE html>
<html ng-app="App">
<head>
<link rel="stylesheet" href="style.css">
<script src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script src="script.js"></script>
</head>
<body ng-controller="MyCtrl">
<h1>Hello Plunker!</h1>
<img ng-directive />
</body>
</html>
这是控制器的指令:
angular.module('App', [])
.controller('MyCtrl', function($scope){
$scope.image = {name: "myName"};
});
angular.module('App')
.directive('ngDirective', function($compile){
return {
link: function(scope, element, attrs){
if(scope.image.name != null){
$compile($(element).attr('ng-src', 'http://lauterry.github.io/slides-prez-angular/img/angularjs.png'))(scope);
}
}
}
});
这是完整的工作示例: http://plnkr.co/edit/LNgsuX
相关文章:
- Meteor如何接收HTTP请求
- 在我的情况下,如何进行http请求
- 使用插件收听Firefox标签的http请求
- http请求使用html而不是json进行响应
- 在node-js路由中发出http请求
- 是否可以在没有HTTP请求或<输入>
- Acync JS HTTP请求通知请求
- PhantomJs在控制台中发出http请求时不会返回任何状态
- PHP处理来自一个页面的http请求,并将其显示在另一个页面上
- Firefox插件-如何发出http请求
- 验收测试主要针对传出的http请求
- 验证HTTP请求来自NFC标签上的点击
- 如何制作'http请求'在Node js中同步
- 为什么我在Cloud9中的http请求总是返回错误
- AngularJS Typeahead和$http请求限制
- HTTP请求使用cURL,但在浏览器中使用javascript时会得到CORS响应
- 如何使用Chrome扩展API获取网页的所有HTTP请求
- 将http请求中的数据传递给C#控制器
- 在初始化路由之前发送$http请求
- 从客户端捕获 HTTP 请求(包括 ajax)