我有来自服务器的消息使用socket.io,每次收到消息我都将它添加到$scope.event
数组,当我收到消息时,如何更新指令隔离范围message
值控制器,它没有发生在下面的代码?
directive.js
angular.module("App").directive('progressBarCustom',function () {
return {
restrict: 'E',
scope:{
message: "=",
fileSize: "=",
},
templateUrl: '/view/partials/progressbar.html',
controller: "StCtrl",
link: function(scope, el, attrs) {
var data = scope.message;
}
});
main.html中
<ul style="list-style: none;">
<li ng-repeat="message in event track by $index" ng-class="{lastItem: $last}"><span><strong>Log:</strong></span><span>{{message}}</span></li>
</ul>
ctrl.js
socket.on('ditConsumer',function (data) {
$scope.event.push(data);
}
$scope.event = ["lorem ipsum","lorem ipsum"];
template.html
<progress-bar-custom ng-show="progressBarFlag" message="event" file-size="selectedFileSize"></progress-bar-custom>
答案 0 :(得分:0)
我从未使用过socket.io,但似乎回调是在Angular控件之外执行的,因此你应该调用$ scope。$ apply以使Angular知道更改。
试试这个:
socket.on('ditConsumer',function (data) {
$scope.$apply(function() {
$scope.event.push(data);
});
}
$ apply()用于从角度框架外部以角度执行表达式。 (例如,来自浏览器DOM事件,setTimeout,XHR或第三方库)。因为我们正在调用角度框架,所以我们需要执行异常处理的适当范围生命周期,执行监视。