ฉันลองใช้วิธีของ neemzy แล้ว แต่มันไม่ได้ผลสำหรับฉันโดยใช้ 1.2.0-rc.3 แท็กสคริปต์จะถูกแทรกลงใน DOM แต่เส้นทางจาวาสคริปต์จะไม่ถูกโหลด ฉันสงสัยว่าเป็นเพราะจาวาสคริปต์ที่ฉันพยายามโหลดนั้นมาจากโดเมน / โปรโตคอลอื่น ดังนั้นฉันจึงใช้แนวทางที่แตกต่างออกไปและนี่คือสิ่งที่ฉันคิดขึ้นโดยใช้ Google Maps เป็นตัวอย่าง: ( Gist )
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');
});
}
}
};
}]);
ฉันหวังว่ามันจะเป็นประโยชน์สำหรับใครบางคน