0

私はブートストラップグリッドを持っていて、いくつかのセルにはブートストラップのドロップダウンコンポーネントが表示されるはずです。ここでは、コードは次のとおりです。ブートストラップドロップダウンリストがbsグリッドで角2で開かない

<div class="table-responsive"> 
    <table class="table"> 
     <thead> 
      ... 
     </thead> 
     <tbody> 
      <tr *ngFor="let item of data"> 
       <td *ngFor="let col of columns"> 
        <!-- other cells --> 
        <div *ngIf='col.type=="dropdown"' class="dropdown"> 
         <!-- This dropdown 
         component 
         is not opened 
         inside my grid--> 
         <!--Dropdown Code starts--> 
         <div class="dropdown"> 
          <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" 
           aria-expanded="true"> 
    Dropdown 
    <span class="caret"></span> 
    </button> 
          <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> 
           <li><a href="#">Action</a></li> 
           <li><a href="#">Another action</a></li> 
           <li><a href="#">Something else here</a></li> 
           <li role="separator" class="divider"></li> 
           <li><a href="#">Separated link</a></li> 
          </ul> 
         </div> 
         <!--Dropdown Code ends--> 
       </td> 
      </tr> 
     </tbody> 
    </table> 
    </div> 
</div> 

そして、それはそのように示されている:私は、ドロップダウンボタンをクリックした場合

enter image description here

しかし、彼らのリストが見えるようになりません。私のコンポーネントのどこか他の場所で同じコードを使用すると、正しく動作しています。

エラーメッセージが表示されず、ブートストラップが正しくロードされています(他のすべてのコンポーネントも機能します)。これで間違っているのは何ですか?

答えて

1

私が覚えているように、ブートストラップドロップダウンはjQueryプラグインを使用すると、あなたはAngular2で発生し、具体的*ngIfとの角度は、(あなたのケース<div class="dropdown">で)内容を再現していることは何ですか

$('.dropdown-toggle').dropdown() 
を呼び出すことで、すべてのドロップダウンを初期化する必要があります条件が変わるたびに(コンディションが trueでないと、内部のHTML部分全体がページから消えていることがわかります)。あなたがページの内容を読み込んでも存在せず、後で作成されたとしても...。グリッドドロップダウンがレンダリングされる前に初期化が行われます。

だから私はあなたのcol.typeが変更されるたびにブートストラップのドロップダウンを開始しなければならないと仮定します。

それとも、代わりに<div [hidden]="col.type == 'dropdown'">プロパティにバインドしようと...しかし、まだ初期化は、これらの要素が含まれているコンポーネントのngAfterViewInitの一つ、ngAfterContentInitngAfterContentCheckedngAfterViewCheckedライフサイクルフック上で行う必要があるドロップダウンすることができます...

とにかく、私が代わりに既存のAngular2-ドロップダウンLIBSのいずれかを使用することができ提案する... angular-uiチームによって開発されたng2-bootstrapと呼ばれるプラグインが

+0

'dropdown()'関数は、あなたが言ったように問題を解決します。ライフサイクルのフックをバインドする必要があると思っていましたが、わかりません。現在、 'ngDoCheck'関数内で' dropdown() '関数を使用しましたが、問題を解決しましたが、今問題はそれがどれだけ効率的なのでしょうか?いくつかの情報を提供できますか?あなたの質問を受け入れることができるように、私のために働いていた答えを編集することができます。ありがとう! – Asqan

+0

私は完全にあなたがドロップアウトのための既存の解決策を検討すべきであることに完全に同意します。 –

+0

このjQuery関数の問題は、ページ上に提供されたcssセレクタを持つすべての項目に 'onclick'をバインドすることです。各ドロップダウンに一意のIDを割り当てることで回避することができます。または、行のリストが変更されたときにのみ選択ボックスを再初期化します...より良い解決策はselectboxのディレクティブを作成し、 'ViewChild'を使用して' dropdown()テンプレート... –

1

があります。
だから、jQueryでangular2エコシステムを汚染するよりも使う方が良いと思います。
link

+0

良い提案、私にパンチを叩く笑+1このアプローチは@Anoopでもお勧めします – Bean0341

関連する問題