angularJS依賴注入時候的順序問題

遇到問題

剛開始接觸angularJS也就三個月,這期間大量的工做都是頻繁的編碼、調試和繼續編碼。這期間也沒有遇到過什麼大問題,angularJS這貨也是學的稀裏糊塗的。
這兩天卻是發現一個問題,我須要一個上傳文件功能,使用了 angular-file-upload 這個module。按照文檔裏的例子寫入依賴注入前端

angular.module('myapp', ['mapDir', 'mapsrv', 'angularFileUpload']) .controller("MapsCtrl", ["$scope", "$http", "$rootScope", '$upload', "lmapsrv", function($scope, $http, $rootScope, $location, lmapsrv,$upload) { ………………………… }) ])
那兩個map有關的是我本身的module,其中一個是directive,$upload是上傳文件有關的。我遇到的問題是在調試代碼的時候老是$upload爲null,用到這的時候老是報錯。檢查依賴和文件都沒用錯,引用也沒發現有什麼特別的問題。昨天發現這個問題以後由於忙着其餘事情,暫時擱置上傳文件這個功能。當時以爲這真奇怪。python

解決問題

今天終於騰出手了想這個事情了,先考慮的是否是angularJS版本不同了(好笑),之前用的1.2.6,如今用的1.2.18。可是換過版本仍是問題依舊,最後只有一招了,打斷點看堆棧和變量。不打沒關係,一打還真看出問題了。發現一個奇怪的現象,明明已經執行過了'angularFileUpload'相關的代碼,可是$upload變量雷打不動的仍是null。真是百思不得其解。在測試尋找問題根源的過程當中,無心間將 "$http", "$rootScope"兩個依賴的位置調換了,忽然發現個人$http.get()開始報錯了,這時候斷點看見的變量更是奇怪$http在firebug裏出現的竟然是$$ 的結構。忽然才明白過來
.controller("MapsCtrl", ["$scope", "$http", "$rootScope", '$upload', "lmapsrv", function($scope, $http, $rootScope, $location, lmapsrv,$upload) {}])
上面中括號裏面的依賴和function的參數列表是順序對應的關係
正確的順序是以下的:
.controller("MapsCtrl", ["$scope", "$http", "$rootScope", '$upload', "lmapsrv", function($scope, $http, $rootScope, lmapsrv,$upload, **$location**) {}])git

問題出現的緣由

問題出現的緣由仍是對angularJS不瞭解,不知道注入依賴還有順序的問題。以前沒有暴露這個問題應該是我每次添加新的module的時候都是在尾部添加,而此次本身寫的module,並且隨意放置位置了,才致使這個我問題的出現。不過有了此次問題,卻是長進了很多!我這裏還潛藏了一個問題,function的最後一個參數也會是空值,原則上應該是我不用就不要寫進來。這時候,感受angularJS真的是頗有意思的東西,我這個寫python後臺應用的,用bootstrap看看參考就能搞一對對漂亮的界面出來,僞前端裝逼也沒人發現。github

相關文章
相關標籤/搜索