我有一个 socket.io 客户端-服务器设置,并在客户端上运行 AngularJS。
// Server.js
var io = require('socket.io')(server);
io.on('connection', function (socket) {
socket.on('message', function (msg) {
//console.log(msg);
console.log(msg);
io.emit('message', msg);
});
});
据观察,它本质上发出message
数据存储在变量中的事件msg
.
然后我有以下客户端代码。
var container = angular.module("AdminApp", []);
container.controller("StatsController", function($scope) {
var socket = io.connect();
socket.on('message', function (msg) {
console.log(msg);
$scope.frontEnd = msg;
});
});
我现在面临一个奇怪的问题。当我编写以下代码片段进行打印时frontEnd
,它不显示。但是console.log(msg);
有效并且它向我显示了从变量发出的数据msg
.
<body ng-app="AdminApp">
<div ng-controller="StatsController">
<p>{{frontEnd}}</p> //Doesn't show anything
</div>
</body>
谁能帮我吗?
您需要包装模型的更改(更改模型上的属性)$scope
), with $scope.$apply(function() {})
为了更新视图。
var container = angular.module("AdminApp", []);
container.controller("StatsController", function($scope) {
var socket = io.connect();
socket.on('message', function (msg) {
console.log(msg);
$scope.$apply(function() { $scope.frontEnd = msg; });
});
});
$apply() 用于从外部执行角度表达式
角度框架。 (例如,来自浏览器 DOM 事件,
setTimeout、XHR 或第三方库)。因为我们正在调用
我们需要执行适当范围生命周期的角度框架
异常处理,执行监视。
来自官方角度文档 https://docs.angularjs.org/api/ng/type/%24rootScope.Scope#%24apply
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)