2016-08-23 48 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

相关问题