2016-08-26 6 views
2

socket.ioを使用しているサーバーからのメッセージがあるたびにメッセージが受信されました。$scope.eventアレイに追加しています。コントローラでメッセージを受け取ったとき、ディレクティブの隔離スコープを更新するにはどうすればいいですか?更新された配列値をディレクティブにバインドする方法は?

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

私は 'console.log($ scope.event)'を使って実際に更新していることを確認します。 ''=''を使って2つの方法で正しくバインドしているようです。 – user2954587

+0

リンク機能の閉じ括弧が欠落しているか、それとも転写エラーですか? –

+0

はいそれは単なる転写エラーです – hussain

答えて

0

私はsocket.ioを使用したことはありませんが、コールバックはAngularコントロールの外で実行されているようですので、$ scopeをコールしてAngularが変更を認識できるようにしてください。

これを試してください:

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

From documentation:

$(適用)は、角フレームワークの外部からの角度での発現を実行するために使用されます。 (たとえば、ブラウザのDOMイベント、setTimeout、XHR、または第三者のライブラリから)。角度フレームワークを呼び出すので、例外処理、時計の実行の適切なスコープライフサイクルを実行する必要があります。

関連する問題