疯狂简单的角度/节点应用程序无法按预期工作

时间:2014-07-17 07:45:27

标签: javascript node.js angularjs

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

当文本字段值更改时,将发出消息并将节点发送出去。我将该值赋给变量,但它始终是一个字符。老实说,我不明白为什么。

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

更糟糕的是,当我在console.log中获取具有完整值的数据时,我会在不改变它的情况下立即分配它,并且它缺少一个字符。我做错了吗?

<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);
    });

});

1 个答案:

答案 0 :(得分:1)

在角度函数之外更改绑定时,需要使用$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;
    });
});