[angularjs入門]$inject,ngmin 修正壓縮之後導致的錯誤

angularjs入門-$inject 修正壓縮之後導致的錯誤

基本上當我們寫javascript的時候,都會為了效能然後壓縮javascript或合併,當我們壓縮的時候,程式碼就會出錯了,在此我就拿一個之前寫的簡單的ng-repeat來示範一下,如下程式碼

demo.html


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
</head>
<body ng-app="App">
        <div ng-controller="FirstCtrl">
            <ul ng-repeat="item in people">
                <li>{{item.name}}-{{item.sex}}</li>
            </ul>
        </div>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
    <script src="App/demo.js"></script>
</body>
</html>

demo.js


angular.module('App', [])
    .controller('FirstCtrl', function ($scope{
        $scope.people = [
            { name: 'anson', sex: 'boy' },
            { name: 'andy', sex: 'boy' },
            { name: 'coco', sex: 'girl' },
            { name: 'lucky', sex: 'dog' },
            { name: 'micky', sex: 'mouse' },
        ];
    });

 

開始把javascript檔壓縮

 

現在我就直接用Web Essentials來做壓縮,如下圖示意

 

image

image

 

接著我直接把原本demo.html裡的 <script src="App/demo.js"></script>換成 <script src="App/demo.min.js"></script>,如下圖示意

 

image

 

此時我們重整一下網頁,會發現出錯了,網頁沒有資料展示,開啟了F12開發者工具,會看到error,主要是因為壓縮之後,js檔會把很多我們注入的名稱改成一些單字簡寫,導致無法辨別

 

image

 

 

使用$inject方式,讓程式碼恢復正常

 

接著我們就開始改造原有的程式碼,讓程式碼恢復正常,其實這個也有很多種方式去寫,下面的例子是第一種方式


angular.module('App', [])
    .controller('FirstCtrl',['$scope', function ($scope) {  
        $scope.people = [
            { name: 'anson', sex: 'boy' },
            { name: 'andy', sex: 'boy' },
            { name: 'coco', sex: 'girl' },
            { name: 'lucky', sex: 'dog' },
            { name: 'micky', sex: 'mouse' },
        ];
    }]);

image

 

紅線框起來的部份,是我有改了之後的語法,這時候我們在重整一下,應該看得出來,可以正常展現資料了,接下來再寫第二種方式可以讓程式碼不被壓縮之後,就壞掉的寫法


angular.module('App', [])
    .controller('FirstCtrl', ['$scope', FirstCtrl]);
    
function FirstCtrl($scope) {
    $scope.people = [
           { name: 'anson', sex: 'boy' },
           { name: 'andy', sex: 'boy' },
           { name: 'coco', sex: 'girl' },
           { name: 'lucky', sex: 'dog' },
           { name: 'micky', sex: 'mouse' },
    ];
}

 

或者我們可以使用ngmin這個第三方套件,然後在主控台直接自動幫我們處理這種問題,轉出來的語法也是會類似像第一種的方式,請直接使用node.js的方式去下載ngmin

 

image

 

然後我們可以下語法,從哪支檔案要轉出哪個檔案的方式,先到我們主目錄的資料夾裡面,然後下語法,接著我們直接把轉出的檔案加進來vs裡面,注意一下轉出的程式碼可以自行命名,不一定是要照這樣子的命名方式,我只是按照官網的命名為例,如圖示例

 

image

image

 

接著我們再對demo.annotate.js壓縮,然後再把demo.html改成用demo.annotate.mn.js

 

image

 

這樣子畫面也是正常的,筆者個人是都習慣自己手動寫第一種方式,就看個人喜好的選擇,以上再請多多指教