<body ng-app="groupChatApp" ng-controller="groupChatController">
<div id="error-container">{{errorValue}}</div>
<div ng-model="changeForm" id="changeForm">
<input id="name" type="text" name="name" value="" placeholder="ENTER YOU NAME!" ng-model="name">
<button type="button" name="button" ng-click="setUsername()">Let me chat!</button>
</div>
</body>
<script>
var app = angular.module('groupChatApp', []);
app.controller('groupChatController', function ($scope) {
$scope.errorValue = "";
$scope.messageDisplay = "";
var socket = io();
$scope.setUsername = function () {
socket.emit('setUsername', $scope.name);
}
$scope.sendMessage = function () {
var msg = document.getElementById('message').value;
if (msg) {
socket.emit('msg', {message: msg, user: user});
}
}
var user;
socket.on('userExists', function (data) {
$scope.errorValue = data;
});
socket.on('userSet', function (data) {
user = data.username;
document.getElementById('changeForm').innerHTML = '<input type="text" id="message"><button type="button" ng-click="sendMessage()">Send</button>'
+ '<div id="message-container"></div>';
;
});
socket.on('newmsg', function (data) {
if (user) {
document.getElementById('message-container').innerHTML += '<div><b>' + data.user + '</b>: ' + data.message + '</div>'
}
});
});
</script>
我正在尝试的是socket.io群聊应用程序 - 节点js。 在此处,单击按钮时ng-click不起作用。我觉得它没有进入功能。当我使用onclick和它的功能名称时。但ng-click没有。我无法发现它。任何帮助将不胜感激。
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function (req, res) {
res.sendfile('index.html');
});
users = [];
io.on('connection', function (socket) {
console.log('A user connected');
socket.on('setUsername', function (data) {
if (users.indexOf(data) > -1) {
socket.emit('userExists', data + ' username is taken! Try some other username.');
} else {
console.log(data);
users.push(data);
socket.emit('userSet', {username: data});
}
});
socket.on('msg', function (data) {
io.sockets.emit('newmsg', data);
console.log('hi');
})
});
http.listen(3000, function () {
console.log('listening on localhost:3000');
});
这是我在节点js中的脚本文件
答案 0 :(得分:1)
单击按钮后,ng-click无效。我觉得这样 没有进入功能。
没有调用哪个函数?
我看到你正在将纯Javascript与AngularJS混合,这不是最好的主意。当您尝试使用AngularJS时,请尝试坚持使用它,尝试以“Angular”方式进行操作。
我只看到一个无法调用的函数 - sendMessage()
,我认为你已经到了成功进入聊天室的地步。现在我将解释为什么不调用你的函数:
您正在动态更新HTML - angular对您的新HTML一无所知。为了让角度知道这个新HTML应该做什么,你需要编译这个HTML所需的范围。例如,您可以像这样更改代码:
// use angular to get this element and not the getElementById function
var container = angular.element('#changeForm');
// update HTML using html() method
container.html(
'<input type="text" id="message">' +
'<button type="button" ng-click="sendMessage()">Send</button>' +
'<div id="message-container"></div>'
);
// now in order your new HTML to work you need to compile it
$compile(container)($scope);
如果我们希望上述代码能够正常运行,我们需要注入 $compile 服务:
app.controller('groupChatController', function ($scope, $compile) { ...
其他东西:
var socket = io();
// I think above code should be
var socket = io('http://localhost:3000');
此代码可以使用,但我强烈反对您这样做。
我会做什么:
所以当使用AngularJS时:
document.getElementById('message-container').innerHTML += '<div><b>' + data.user + '</b>: ' + data.message + '</div>';
是一种不好的做法,您应该将其更改为:
<强> HTML 强>
<ul id="message-container">
<li ng-repeat="message in messages">
<span>{{message.user}}:</span>
<span>{{message.message}}</span>
</li>
</ul>
<强> JS 强>
$scope.messages = [];
socket.on('newmsg', function (data) {
if (user) {
$scope.messages.push(data);
}
});
使用AngularJS时,尝试使用更多Angular样式:)