4

ページにチャットルームを配置するために使用するチャット ディレクティブがあります。

mod.directive('chat', function () {
  return {
    templateUrl: '/chat',
    replace: true,
    scope: { 
      chatID:'@chat',
    },
    controller: function ($scope, $element, $timeout) {
      var id = $scope.chatID
      ...
    },
    link: function ...
  }
})

HTML は次のようになります。

<div class="chat" chat="{{currentChatID}}" ui-view="currentChat"></div>
<div class="content" ui-view="mainContent"></div>

これは「標準」というファイルにあります

mod.config(function($stateProvider) {
  $stateProvider.state('standard', {
    views: {
      'main': {
        templateUrl: '/tmpl/standard',
        controller: function($scope, $timeout) {
          $scope.currentChatID = ''
          $scope.setCurrentChatID = function(newID) {
            $scope.currentChatID = newID
          }
        }
      }
    }
  })
})

angularjs-ui-router を使用して、そのビュー内でチャットを提供するチャット ディレクティブを使用して親ビューを作成しています。これは、最初のページの読み込み時に正常に機能し、チャットが読み込まれます。しかし、ページ/チャット ルームを変更すると、別のコントローラーを使用してsetCurrentChatID(). これによりcurrentChatID、DOM のチャット要素が変更されます。チャット要素のプロパティが angularjs-batarang の新しい ID に変更されることもわかりますが、チャット ディレクティブのコントローラーは実行されません。これを適切に機能させるにはどうすればよいですか?chatID が変更されたときにチャットのコントローラーを有効にするにはどうすればよいですか?

ありがとう。

4

1 に答える 1

4

コントローラーの残りのコードを見ずに言うのは難しいですが、次のようなチャット コントローラーの内部chatが必要になる場合があります。$watch

$scope.$watch('chatID', function(newValue, oldValue) {
    // run some code here whenever chatID changes
});

編集:$digestループと Angular のランタイム操作の詳細については、このAngularJS Guideを参照してください。(ランタイムセクションを確認してください)

コントローラーの詳細については、AngularJS: コントローラーについてのガイドを参照してください。あなたの質問に関連する重要なポイントは次のとおりです。

コントローラーは、次の場合にのみ使用してください。

  1. スコープ オブジェクトの初期状態を設定します。
  2. スコープ オブジェクトに動作を追加します。( などの作成を含む$watch)

$digestループ処理のみ:

  1. 待ち$evalAsync行列
  2. $watchリスト_
于 2013-05-20T01:37:40.670 に答える