我写了一个工厂来在控制器之间共享数据。这是样本
.factory('sharedData', function () {
var property = {
title: '',
color: ''
};
return {
getTitle: function () {
return property.title;
},
setTitle: function (title) {
property.title = title;
},
getColor: function () {
return property.color;
},
setColor: function (color) {
property.color = color;
}
};
我正在使用控制器在工厂中使用。
设置数据sharedData.setTitle("title");
但是当我打电话时:
console.log(sharedData.getTitle());
我收到空字符串。我已在控制器中正确注入服务。任何帮助表示赞赏。
修改 很抱歉错过了一条重要信息。我在成功的REST调用代码如下所示后设置数据。
var req =
{
method: 'GET',
url: "/titleName"
headers: {
'Content-type': 'application/json'
}
};
$http(req)
.success(function (response, status)
{
console.log(status);
console.log(response[0].name);
sharedData.setTitle(response[0].name);
sharedData.setColor(response[1].color);
})
.error(function (response, status)
{
});
Json的回应如下:
[{"name":"Name"},{"color":"red"}]
console.log成功回调正在给出正确的响应名称。感谢
答案 0 :(得分:0)
// EDIT
啊,我看到你使用异步方法。 所以是的,你应该回报成功的承诺和决心。
因为控制器不知道它是否异步,所以只需要一个值。
因此,当服务检索数据时,控制器已经要求提供数据。
然后你将返回一个空字符串。
当您退回承诺时,您可以在路由或控制器中解决它。
//因为数据在问题上发生了变化,所以Plunkr已经过时了 嗨,我创造了一个非常小的傻瓜。
.controller('har', function(sharedData) {
sharedData.setTitle("test")
console.log(sharedData.getTitle())
sharedData.setTitle("test2")
console.log(sharedData.getTitle())
});
http://plnkr.co/edit/CvKgKtGmjCDxtk4dcbtv?p=preview
检查控制台
我使用了你的工厂和一个简单的控制器,对我来说它看起来像是在工作。
您是否有任何其他依赖关系,或者您是否以不同方式使用它。