간단한 Angular 앱이있어서 사람이 이미지를 클릭하면로드 메시지가 표시되고 이미지가로드되면 숨 깁니다.변수가 값을 업데이트하지 않는 것 같습니다.
scope.loading = false;
을 제거하면 메시지가 표시되지만 이미지를로드하는 데 5 초 이상 걸리는 경우에도 메시지가 표시되지 않습니다.
누구든지 잘못된 것을 볼 수 있습니까?
app.controller('ProductsCtrl', function($scope, $interval) {
$scope.images = LayerData['images'];
$scope.mainImage = '/open/img/'+$scope.images[0].section+'/'+$scope.images[0].file;
$scope.loading = true;
$scope.main = function(img) {
$scope.mainImage = '/open/img/'+img.section+'/'+img.file;
}
});
app.directive('imageonload', function($timeout) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('load', function() {
scope.$apply(function() {
scope.loading = false;
});
});
scope.$watch(function() { return scope.mainImage; }, function (newValue) {
if (newValue) {
scope.loading = true;
element.attr('src', scope.mainImage);
}
});
element.attr('src', scope.mainImage);
}
};
});
는 관련 HTML은 이것이다, 그러나 당신이 필요로하는 경우/그 무엇 {리터럴을} 그래서 나머지는 나에게 이것은 멋지의 혼합물과 각도를 사용
<div class="row wrapper" ng-controller="ProductsCtrl">
<div col>
<div row>
<div col>
<h1>{$section.title}</h1>
</div>
</div>
</div>
{literal}
<div col>
<div row>
<div col lg="7" md="7">
<p ng-show="loading">Loading image...</p>
<div id="mainImage">
<img ng-src="{{mainImage}}" imageonload style="max-width:100%;" />
</div>
</div>
<div col lg="5" md="5">
{/literal}
{$sidebar}
{literal}
</div>
</div>
</div>
<div col class="imgList">
<div class="scrolls">
<div class="imageDiv">
<img src="/assets/media/img/{{img.section}}/thumb-100-{{img.file}}" ng-click="main(img)" ng-repeat="img in images" />
</div>
</div>
</div>
{/literal}
</div>
에 알려보고 싶어 그리고 {$ ...}은 ~을위한 것입니다.
나는 아직도 당신이 실제로 HTML에 이미지 경로를 결합하는 방법을 포함하지 한 이후 훨씬 더 말할 수없는 코드 –
과 같은 문제가 있습니다. 그러나 'load' 이벤트에 대한 바인딩은'img' 태그에 대해'src' 속성이 설정되기 전에 완료되어야합니다.jQuery를 사용하지 않더라도 Angular는 jqLite를 사용하므로 관련성이 있습니다. http://stackoverflow.com/questions/3877027/jquery-callback-on-image-load-even-when-the-image-is-wind- 캐시 됨 – miqid
페이지의 모든 HTML로 내 게시물을 업데이트했습니다. –