Понимание AngularJS ng-src
как пояснил здесь, директива angularjs ng-src используется для предотвращения загрузки браузером ресурса (например, изображения) до того, как руль будет проанализирован. В настоящее время я использую следующий код:
<div ng-controller="MyCtrl">
<img ng-src="http://localhost:8081/media/{{ path }}" />
</div>
со следующим JS:
function MyCtrl($scope, $timeout) {
$timeout(function () {
$scope.path = 'images/23694c70-04d7-11e3-9ba8-73fb00de24c4.png';
}, 1000);
};
путь извлекается из веб-службы. Из-за этой задержки, браузер пытается загрузить http://localhost:8081/media/
, что вызывает 404. Как только путь будет получен, браузер выдаст правильный запрос и загружает изображение.
каков предпочтительный метод предотвращения загрузки любых ресурсов, пока все данные не будут готовы?
см. jsfiddle для примера мою ситуацию.
спасибо,
Martijn
6 ответов
поместите весь путь внутри переменной $scope. Что путь ng-src
будет ждать, пока вы не предоставите ему полностью разрешенный путь к изображению:
<div ng-controller="MyCtrl">
<img ng-src="{{ path }}" />
</div>
function MyCtrl($scope, $timeout) {
var path = 'https://si0.twimg.com/profile_images/';
$timeout(function () {
$scope.path = path + '2149314222/square.png';
}, 1000);
};
информация к примеру
давайте blogitem directive
.
В приведенных выше примерах уже показано, как установить значение по умолчанию.
HTML:
<blogitem ng-repeat="item in items"
bg-src="{{ item.image }}"
caption="{{ item.title }}"/>
JS:
.directive( 'blogitem', function()
{
return {
restrict : 'E',
templateUrl : 'js/app/directives/blogitem.html',
replace : true,
// pass these two names from attrs into the template scope
scope : {
intro : '@',
bgSrc : '@'
}
}
} )
шаблон HTML :
<article>
<img ng-src="{{ bgSrc }}"/>
<p>{{ intro }}</p>
</article>
надеюсь, это поможет вам понять ng-src
.
Я тоже попал в ту же проблему. Я заметил, что если значение для ng-src не определено, то img не извлекается. Поэтому я создал метод утилиты для объединения двух аргументов и возврата значения тогда и только тогда, когда оба аргумента определены. Увидеть ниже.
<div ng-controller="MyCtrl">
<img ng-src="{{MyUtil.strConcat('http://localhost:8081/media/', path)}}" />
</div>
myApp.factory('MyUtil', function() {
return {
strConcat: function(str1, str2) {
return (angular.isDefined(str1) && angular.isDefined(str2)) ?
(str1 + str2) : undefined;
}
}
});
function MyCtrl($scope, $timeout, MyUtil) {
$scope.MyUtil = MyUtil;
...
}
вы можете установить ng-src
в пустую строку, если данные еще не заполнены:
<div ng-controller="MyCtrl">
<img data-ng-src="{{ path && 'http://localhost:8081/media/'+path || '' }}" />
</div>
, когда path
неинициализирован, условие будет короткое замыкание и перейти к or
часть и установить data-ng-src
до ''
(пустая строка), таким образом не попав на сервер.
в последней версии вы можете оценить его следующим образом:
ng-src="{{ methodThatReturnsString() }}"
Я уверен, что 100% работы
сначала вы должны сделать свой запрос такой
select (select '../Images/'|| T_LANG2_NAME ||'.png' T_LANG2_NAME from T04222_T where T_LOG_ID = T04220.T_C_STATUS) TIMER from T04220
where T_PAT_NO = '89004331' group by T_C_STATUS
having max(T_ARRIVAL_DATE) = (select max(T_ARRIVAL_DATE) from T04220 where T_PAT_NO = '89004331');) then you write Code for Controller like this ( if (scope.T_PAT_NO) {
debugger;
$http({
method: 'POST',
url: '/T04205/GetTimerImage',
data: JSON.stringify({ PatientCode: scope.T_PAT_NO })
}).
success(function (data) {
debugger;
var newDataJSON = JSON.parse(data);
scope.TIMER = newDataJSON[0].TIMER;
});
затем html-код, как это
<input id="imTimer" type="image" src="{{TIMER}}" style="width: 80px;height: 80px" />