2015-12-08 33 views
1

當我將腳本動態加載到頁面時遇到問題。目前我們有兩個獨立的項目,一個SharePoint應用程序和一個「CDN」網站,我們託管我們所有的內容文件(js,css,圖像等)。

由於這些事件被分離到多個項目中,我們必須通過加載腳本的方式來創造性(確保如果我們瀏覽我們的Sharepoint項目的開發環境,它會從CDN的開發環境加載內容)

這裏我們使用動態加載腳本代碼的腳本:

<script type="text/javascript"> 
     var ReferenceLoader = (function() { 
      var cdnUrl = { 
       'devSPDomain': 'https://devCDN/', 
       'testSPDomain': 'https://testCDN/', 
       'prodSPDomain': 'https://prodCDN/' 
      }, 
      baseUrl = cdnUrl[window.location.host] || 'https://prodCDN/'; 

      this.InsertReference = function (sources, type) { 
       sources = [].concat(sources); // make sure it's an array 
       type = type || 'script'; // default to script 

       switch (type.toLowerCase()) { 
        case 'script': InsertScriptReference(sources); break; 
        case 'style': InsertStyleReference(sources); break; 
        default: console.log('Invalid type supplied to \'InsertReference()\''); 
       } 
      }; 

      function InsertScriptReference(sources) { 
       for (var i = 0; i < sources.length; i++) { 
        var s = document.createElement('script'), 
         src = baseUrl + sources[i]; 

        s.setAttribute('type', 'text/javascript'); 
        s.setAttribute('src', src); 

        document.head.appendChild(s); 
       } 
      } 

      function InsertStyleReference(sources) { 
       for (var i = 0; i < sources.length; i++) { 
        var s = document.createElement('style'), 
         src = baseUrl + sources[i]; 

        s.setAttribute('rel', 'stylesheet'); 
        s.setAttribute('href', src); 

        document.head.appendChild(s); 
       } 
      } 

      return this; 
     })(); 
    </script> 

然後任何給定的頁面中我們可以做這樣的:

<script type="text/javascript"> 
    var scripts = [ 
     'dist/js/plugins/chart/0.0.1/chart.min.js', 
     'dist/js/shared/services/util/0.0.1/utilServices.min.js', 
     'dist/js/components/home/0.0.4/home.min.js' 
    ]; 

    ReferenceLoader.InsertReference(scripts); 
</script> 

現在,這一切都很好,我可以在頁面上看到它成功地將腳本/鏈接標記放在head元素中,但是我得到一個angular injector error。我是110%正面的文件,其中的模塊正在加載,如果我只是做一個正常的腳本標記,直接指向它在我的網頁上(在頭部或身體),它工作正常。有任何想法嗎?

這裏有一個plunker顯示問題

回答

1

我結束了做兩件事情解決這個:

  • 添加回調參數的被稱爲元素的.onload/.onreadystatechanged事件的InsertReference,以便每次腳本完成時完成加載它執行
  • 刪除從aplication的NG-app標記和手動自舉一次所有的腳本文件被加載完成
0

我想你請求文件的方式是好的,但由於縮小的文件很可能發生噴射錯誤。 必須使用微小安全控制器聲明:

var myController = function(anyVariableName, $http) { 
    //We included $scope and the $http service into our controller. 
    //Since we set up the $inject attribute on our controller, it doesn't matter what variable names we use. 
} 

myController.$inject = ['$scope', '$http'] 

看一看這裏:http://thegreenpizza.github.io/2013/05/25/building-minification-safe-angular.js-applications/

+0

不幸的是,這不是它,一切正常精縮。 –