angularjs工厂数据共享

时间:2015-04-27 11:02:26

标签: angularjs

我写了一个工厂来在控制器之间共享数据。这是样本

.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成功回调正在给出正确的响应名称。感谢

1 个答案:

答案 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

检查控制台

我使用了你的工厂和一个简单的控制器,对我来说它看起来像是在工作。

您是否有任何其他依赖关系,或者您是否以不同方式使用它。