如何将更新的数组值绑定到指令?

时间:2016-08-26 19:02:39

标签: javascript angularjs angularjs-directive

我有来自服务器的消息使用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>

1 个答案:

答案 0 :(得分:0)

我从未使用过socket.io,但似乎回调是在Angular控件之外执行的,因此你应该调用$ scope。$ apply以使Angular知道更改。

试试这个:

socket.on('ditConsumer',function (data) {
  $scope.$apply(function() {
    $scope.event.push(data);
  });
}

From documentation:

$ apply()用于从角度框架外部以角度执行表达式。 (例如,来自浏览器DOM事件,setTimeout,XHR或第三方库)。因为我们正在调用角度框架,所以我们需要执行异常处理的适当范围生命周期,执行监视。