2016-08-23 119 views
0

我正在嘗試編寫一個服務來存儲URL的查詢字符串。我這樣做是通過將它存儲在一個cookie中然後檢索它。但是,當我嘗試從控制器訪問saveURL方法添加查詢字符串,我得到這個錯誤:Angular-service TypeError:無法讀取未定義的屬性'saveURL'

類型錯誤:無法讀取屬性未定義

controller.js的「saveURL」

angular 
    .module("app.alerts.alertView") 
    .controller("AlertViewsController", AlertViewsController); 

    AlertViewsController.$inject = [ 
     "$scope", "$location", "alertHistory" 
    ]; 

    function AlertViewsController($scope, $location, alertHistory) { 
     alertHistory.saveURL($location.search()); 
    } 

service.js

(function() { 
    "use strict"; 

    angular 
     .module("app.alerts.alertView") 
     .service("alertHistory", alertHistory); 

    alertHistory.$inject = [ 
     "$cookieStore"]; 

    function alertHistory ($cookieStore) { 
     return { 
      saveURL: function (urlObj) { 
       var array = $cookieStore.get("key"); 
       array.push(urlObj); 
       $cookieStore.put("key", array); 
      } 
     }; 
    } 
})(); 

我已經正確地注射服務。還有什麼我可以糾正,以解決這個錯誤。請幫助

+0

你確定服務文件加載在瀏覽器中,並以正確的順序(角,然後再服務等) – MBielski

+0

是,裝載在正確的順序發生。 – user2128

+0

順序是角度,服務,控制器!那是對的嗎 ? – user2128

回答

0

看起來像是發生的事情是,你沒有返回你認爲你正在返回的東西,因爲返回對象對於JS來說不夠具體。此外,您忘記了注入$location服務。我會嘗試重寫,如下所示:

angular 
    .module("app.alerts.alertView") 
    .service("alertHistory", [ '$cookieStore', function ($cookieStore) { 
    var x = {}; 
    x.saveURL = function (urlObj) { 
     var array = $cookieStore.get("key"); 
     array.push(urlObj); 
     $cookieStore.put("key", array); 
    }; 
    return x; 
}]).controller('AlertViewsController', [ '$scope', '$location', 'alertHistory', function ($scope, $location, alertHistory) { 
    alertHistory.saveURL($location.search()); 
}]); 
+0

感謝您的努力。我試着添加空變量。但它沒有工作:(我在我的代碼中注入了$ location,只是錯過了這裏。 – user2128

相關問題