跨两个不同的控制器更新视图

时间:2015-10-19 07:35:07

标签: angularjs ionic

我正在尝试使用离子框架构建一个简单的移动消息传递应用程序。有两个视图,一个用于消息,一个用于请求。当接受请求时,应该从Request视图(和请求列表)中删除用户并移动到Messages视图(并推送到消息列表)。

有两个控制器,RequestCtrl和MessageCtrl。当在视图中接受请求时,RequestCtrl从请求列表中删除用户,并将用户添加到MessageCtrl中的消息列表。到目前为止,这已经通过创建Angular服务来完成:

app.factory('$chats', ['$localstorage', '$http', '$rootScope',
function($localstorage, $http, $rootScope) {
    return {
        refresh: function() {
            var messages = [];
            var user = $localstorage.getObject('user');
            console.log("message before user");
            console.log(user);
            for (var i = 0; i < user.interactions.length; i++) {
                if (user.interactions[i].isConnected == "connected") {
                    var friend = user.interactions[i].user_id;
                    $http.get('/get_profile?id=' + friend).then(function(resp) {
                        messages.push({
                            "_id": resp.data._id,
                            "profileImg": resp.data.profileImg,
                            "firstName": resp.data.firstName,
                            "lastName": resp.data.lastName,
                            "lastMessage": "This is placeholder text"
                        });
                    });
                }
            }
            // $rootScope.$broadcast("chatsUpdated");
            return messages;
        }
    }
}

但是,更新列表时,视图不会更新。我已经尝试在调用服务时使用$ emit和$ broadcast推出一个事件,并在MessageCtrl中使用$ on捕获它,但它似乎没有更新。

我对Angular很新,所以我可能会遗漏一些东西,但如果有人能指出我正确的方向,我真的很感激!

1 个答案:

答案 0 :(得分:0)

编辑开始:

假设你的控制器中有$scope.messages = $chats.refresh() ...

编辑结束:

您的问题可能是您使用var messages = []创建并返回一个新数组。 Angular仍然会监视以前生成的数组,并且永远不会知道这些更改。

只需传递原始数组refresh(messages)并使用messages.length = 0清空数组。这将保留您附加到范围的原始数组。