我正在尝试使用离子框架构建一个简单的移动消息传递应用程序。有两个视图,一个用于消息,一个用于请求。当接受请求时,应该从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很新,所以我可能会遗漏一些东西,但如果有人能指出我正确的方向,我真的很感激!
答案 0 :(得分:0)
编辑开始:
假设你的控制器中有$scope.messages = $chats.refresh()
...
编辑结束:
您的问题可能是您使用var messages = []
创建并返回一个新数组。 Angular仍然会监视以前生成的数组,并且永远不会知道这些更改。
只需传递原始数组refresh(messages)
并使用messages.length = 0
清空数组。这将保留您附加到范围的原始数组。