我在我的控制器中注入了这项服务。它只是一种共享某些属性的服务。
angular.module('app', []).
service('sharedProperties', function () {
var list_name = '';
return {
getListName: function() {
return list_name;
},
setListName: function(name) {
list_name = name;
}
};
});
我有两个控制器。在第一个中,我设置了 list_name 的值。在我的第二个,我想重试这些信息。
这是我的控制器的定义方式:
function ListCtrl($scope, $http, sharedProperties) {
...
$scope.changeListName = function(list_name) {
sharedProperties.setListName(list_name);
console.log(list_name, sharedProperties.getListName()); # shows ( 'metro', 'metro') == metro being a dummy list_name
...
};
function ItemCtrl($scope, $http, sharedProperties) {
...
$scope.showOnlyList = sharedProperties.getListName();
console.log(this.sharedProperties.getListName()); # empty string
...
};
我记录了变量并在浏览器控制台中检查了它们,并注意到 ListCtrl 正确设置了共享属性。问题来自 ItemCtrl 控制器。似乎当我尝试使用 访问 list_name 时sharedProperties.getListName();
,该属性为空,或者该函数返回一个空字符串。
更新
我以为问题出在服务上。所以我决定使用Lungojs 的数据库。
我得到以下代码:
在 ListCtrl 中:
$scope.changeListName = function(list_name) {
Lungo.Data.Cache.set("ListName", list_name);
console.log('LIST', Lungo.Data.Cache.get("ListName"));
};
在 ItemCtrl 中:
$scope.showOnlyList = Lungo.Data.Cache.get("ListName");
console.log('ITEM', Lungo.Data.Cache.get("ListName"));
ListCtrl 中的日志显示缓存设置为正确的 list_name。Lungo.Data.Cache.get("ListName")
但是,即使在 ListCtrl 上它是正确的,ItemCtrl 的控制台也会显示它是未定义的!
我还尝试用 HTML5 本地存储替换缓存但没有成功...