2016-07-20 4 views
0

私は現在、モーダルウィンドウでディレクティブを開いているボタンの機能に取り組んでいます、と私はシンプルに作成したいが可能ですので、私はディレクティブ対でモーダルコンテナとフラグそれを取った:ng-ifがtrigerdの場合は、

<div ng-if="vm.Modal.Modal1"> 
<directive-for-modal-one params="vm.params1"><directive-for-modal-one> 
</div> 
<div ng-if="vm.Modal.Modal2"> 
<directive-for-modal-two params="vm.params2"><directive-for-modal-two> 
</div> 
.... 

とコントローラでそこにこのモーダルのすべての活動を変更する機能は、あるvm.Modal.n

function test(name){ 
     CloseModal(); 

     vm.Modals[name]= true 

    } 
function CloseModal() { 

     for (var property in vm.Modals) { 

      vm.Modals[property]= false; 

      } 
    } 

そして、あなたがNG-場合についても、値がfalseの同じモーダル2時間を、開くためにクリックした場合、問題はその中にありますそしてそれが本当の後、再開されたモーダルは古いものであり、破壊されなかった。私はこれが起こっていることを理解しています。なぜなら、javascriptはシングルスレッドであり、関数ではありませんが、関数内にある間にこの値が変更されたときにどうやって角度チェックを行うことができます。いくつかのkindeリフレッシュまたはチャックコマンド?

+0

私は右のuを取得する場合uは 'closeModelは()'が実行された後、そこにあるべきという効果を達成しようとしています'vm.Modals [name] = true'を実行する前に、DOMレンダリングプロセス(' ng-if'値が変更されたためにモーダルの閉鎖効果があるかもしれません)? – MMhunter

+0

@MMhunter after from closeModel()ng-ifをトリガーするプロセスが必要です。何か案が? –

答えて

0

をコードを聞いてきます私は$ timeoutmの使用でこれをやりました。

CloseModal(); 

$timeout(function(){ 
    vm.Modals[name]= true 
}) 

$ evalAsync VS説明とcomperation $タイムアウトがあります: AngularJS : $evalAsync vs $timeout

1

$scope.$evalAsyncにCloseModal()の後にurロジックを入れてみることができます。

CloseModal(); 

$scope.$evalAsync(function(){ 
    vm.Modals[name]= true 
}) 

これは)現在の$ダイジェスト(後に実行されるように

+0

こんにちは、私の場合にはDOMがアンギュラで操作される前に実行されているコントローラからの$ evalAsyncをリードしてくれたので、私にとっては解決策ではありません。私は$ timeoutを使用しましたが、私の場合はうまく動作します。 –