2017-11-03 3 views
1

私は、ui-view(ナビゲーションバー)の外にコンポーネントがあるアプリケーションで作業しています。このコンポーネントには、$ locationが変更された後に起こる非同期イベントにリスナーを追加するディレクティブが含まれています。私はui-view内の多くの場所で同じ指示をしています。問題は、ui-view内のディレクティブが$ locationの変更ごとに再レンダリングされますが、ナビゲーションバー内のディレクティブは再レンダリングされず、リスナーが割り当てられないということです。 ディレクティブの再レンダリングを強制する方法はありますか?ui-viewの外側にあるangular.jsディレクティブをリロードする方法はありますか?

Index.htmlと:

<body ng-app="myapp"> 
    <nav class="cf" ng-include="'app/components/registration/nav.html'"></nav> 
    <div ui-view autoscroll="true"></div> 
</body> 

nav.html:

<div ng-controller="RegistrationController"> 
    <my-directive></my-directive> 
</div> 

directive.js:

function myDirective(WSService, ShoutingRoomService, VIDABOO_CONSTANTS, $rootScope, $scope) { 
return { 
    scope: {}, 
    replace: true, // Replace with the template below 
    bindToController: false, 
    link: function(scope, element, attrs) { 
    $rootScope.$on('SomeAsyncEvent', function(event, data) { 
      WSService.doWhenSomeAsyncEventHappens(function() { 
       changeSomethingVisibleInHTMLTemplate(); 
      }) ; 
     }); 
    }, 
    template: '<div>ChangeThisWhenAsyncEventHappens</div>' 
    }; 
}; 

答えて

0

あなたは$scopeを再リンクする角度強制的に$compileを使用してに見て、持っています一緒にあなたのテンプレート?

$コンパイルのクイック概要:

をコンパイルは、DOMツリーを歩くとディレクティブにDOM 要素を一致させるプロセスです。

これは私の提案です。このようなコードをあなたのコードに追加してみてください:

$compile(angular.element('div.someElement').contents())($scope); 
関連する問題