我使用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);
});
});
答案 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;
});
});