如何从resolve方法内部更新作用域

How to update the scope from inside a resolve method?

本文关键字:内部 更新 作用域 方法 resolve      更新时间:2023-09-26

我正试图清除在我的聊天系统中发送消息后的输入,但范围不想更新。将其设置在$apply, $digest$timeout中不起作用,因为消化循环已经在进行中。

函数如下:

$scope.sendMessage = function(chat, newMessage) {
    var messageObj = {
        by: $scope.uuid,
        message: newMessage,
        timestamp: Date.now()
    }
    fbCrud.push('chats/' + chat.$id + '/history', messageObj)
        .then(function() {
            newMessage = '';
        })
        .catch(function(err) {
            setStatus(false, 'Unable to send message', true);
    });
};

这是我的textarea:

<textarea ng-enter="sendMessage(chat, newMessage)" ng-model="newMessage"></textarea>

如何解决这个问题?

在作用域中创建一个新的messageObject:

$scope.msgObject = {};

在你的HTML中,将输入绑定到这个新对象

中的属性
<input type="text" ng-model="msgObject.message">

在sendMessage函数中,不要使用parameter,而是使用来自$scope.msgObject

的消息

最后在'then'功能清除您的$scope.msgObject.message。因为绑定,你的html输入字段也会被清除。

在您的then中,您使用:

.then(function() {
    newMessage = '';
})

这里的newMessage是匿名then函数中的一个局部变量。如果使用<input ng-bind="message">

,则需要将范围值(例如$scope.message)设置为''