【问题标题】:Insanely simple angular/node app not working as expected非常简单的角度/节点应用程序无法按预期工作
【发布时间】:2014-07-17 15:51:01
【问题描述】:

我使用 angular 和 node 制作了最简单的应用程序。它是一个在文本字段上有一个 ng-model 的聊天应用程序。

当文本字段值发生变化时,会发出消息并由节点发送出去。我将该值分配给一个变量,但它总是落后一个字符。老实说,我不知道为什么。

例如,文本字段值为“hello world”,{{receive}} 打印出“hello worl”。

更糟糕的是,当我控制台记录它具有完整值的数据时,我立即分配它而不改变它,并且它缺少一个字符。我是不是做错了什么?

<p>{{receive}}</p>
<input ng-model="msg"></input>
<script>

var app = angular.module('app', []);
app.controller('chat', ['$scope',

function($scope) {
   var socket = io.connect();
    $scope.msg = '';
    $scope.receive = '';

        $scope.$watch('msg',function(){
            socket.emit('send message', $scope.msg);
        });

        socket.on('new message', function(data){
            console.log(data);
            // console.logging results in the entire message
            $scope.receive = data;
        });

}]);

</script>

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

server.listen(3000);

app.get('/', function(request, response){
    response.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function(socket){

    socket.on('send message', function(data){
        io.sockets.emit('new message', data);
    });

});

【问题讨论】:

    标签: javascript node.js angularjs


    【解决方案1】:

    在 Angular 函数之外更改绑定时,您需要使用 $scope.$apply 更新绑定。

    socket.on('new message', function(data){
        console.log(data);
        // console.logging results in the entire message
        $scope.receive = data;
        $scope.$apply();
    });
    

    它也可以像这样使用,它捕获函数内部抛出的任何错误并无论如何更新。

    socket.on('new message', function(data){
        console.log(data);
        // console.logging results in the entire message
        $scope.$apply(function () {
            $scope.receive = data;
        });
    });
    

    【讨论】:

    • 这解决了,谢谢,我不熟悉角度和节点。计时器到时将接受您的回答。只是出于好奇,为什么会延迟 1 个字符?
    • @JosueEspinosa 每次键入字符时都会调用$scope.$watch,它会更新绑定。所以每次你输入一个字符时都会有一个更新,但是更新是用你当时从服务器收到的任何消息完成的,在最短的延迟下,它会缩短 1 个字符。
    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多