나는 neemzy의 접근 방식을 시도했지만 1.2.0-rc.3을 사용하여 작동하지 않았습니다. 스크립트 태그는 DOM에 삽입되지만 자바 스크립트 경로는로드되지 않습니다. 로드하려는 자바 스크립트가 다른 도메인 / 프로토콜에서 왔기 때문이라고 생각합니다. 그래서 저는 다른 접근 방식을 취했고, 이것이 구글지도를 예로 들어 제가 생각해 낸 것입니다. ( 요점 )
angular.module('testApp', []).
directive('lazyLoad', ['$window', '$q', function ($window, $q) {
function load_script() {
var s = document.createElement('script');
s.src = 'https://maps.googleapis.com/maps/api/js?sensor=false&callback=initialize';
document.body.appendChild(s);
}
function lazyLoadApi(key) {
var deferred = $q.defer();
$window.initialize = function () {
deferred.resolve();
};
if ($window.attachEvent) {
$window.attachEvent('onload', load_script);
} else {
$window.addEventListener('load', load_script, false);
}
return deferred.promise;
}
return {
restrict: 'E',
link: function (scope, element, attrs) {
if ($window.google && $window.google.maps) {
console.log('gmaps already loaded');
} else {
lazyLoadApi().then(function () {
console.log('promise resolved');
if ($window.google && $window.google.maps) {
console.log('gmaps loaded');
} else {
console.log('gmaps not loaded');
}
}, function () {
console.log('promise rejected');
});
}
}
};
}]);
누군가에게 도움이되기를 바랍니다.