2016-09-13 9 views
0

私は選択ドロップダウンにjqueryメソッドを適用する前まで、データが選択ドロップダウンにバインドされるまで待機したい角度のアプリケーションを持っています。角度1.5.8 - 角度で要素にデータをバインドすると、アクションを実行するにはどうすればよいですか?

私の以前の関連する質問では、次のコードを使用してドロップダウンに成功しました。

<select name="shippingState" id="shippingState" ng-model="accountAddresses.shippingState" ng-options ="state.abbreviation for state in states track by state.abbreviation" class="state form-control" size="1"> 
         </select> 

AngularJS (1.5.8) - How do I populate a select option list directly from within controller that gets a json object?

今私はjqueryのメソッド(カスタム選択ボックスのドロップダウンスタイリングライブラリ)を適用したいです。

データが読み込まれると、ブラウザコンソールで手動でメソッドを適用できます。 問題は、ブラウザコンソールで手動でアクションを実行できることです。

ドロップダウンデータをフェッチしているときに、同じ方法を角度で実行することはできません。

質問: データバインディングが角度で終了すると、どのようにアクションをトリガーできますか?

EDIT - 私はディレクティブを作成し、このディレクティブをトリガーするように自分のhtmlを変更しました。

まだカスタムスタイルの要素はありません。ルートコントローラへ

指令チェインド

directive('onDataBind', function (id) { 
         alert(id); 
          function link(elem, id) { 
          elem.ready(function(id){ 
           $scope.CreateDropDown(id); 
           }); 
          } 
          }) 

HTML修正

  <select name="billingState" id="billingState" ng-model="accountAddresses.billingState" ng-options ="state.abbreviation for state in states track by state.abbreviation" on-data-bind="CreateDropDown('billingState')" class="state form-control" size="1"> 
      </select> 

次のディレクティブコードが問題を解決する助け

$scope.CreateDropDown = function(id){ 
     $("#"+id).selectbox(); 
     //selectbox is the following library - https://github.com/olivM/jQuery-Selectbox 
    } 
+0

ディレクティブと '$ timeout()'を使用します。 – Lex

+0

@Lex、あなたは私にそれを打つ。助けてくれてありがとう。編集内容をご覧ください。 – Vahe

+0

私はまだこの指令に取り組む措置はありません。関数リンクにスコープを注入する必要がありますか? – Vahe

答えて

0

スコープレベルでドロップダウンを作成します。 。私は指示どおりにタイムアウトを使用しました。

directive('onDataBind', function() { 
        function link(scope, elem) { 
        var id = elem.attr("id"); 
        elem.ready(function(){ 
        setTimeout(function() { 
         $("#"+id).selectbox(); 
        }, 1000); 
         //$('#'+id + ' .sbHolder > .sbOptions').wrap("<div class='optionsDiv'></div>"); 
         //$("#"+id + " .sbHolder > a.sbToggle, "+id+" + .sbHolder a.sbSelector").wrapAll("<div class='selectDiv'></div>"); 
        })(id); 
        } 
        return { 
         link: link, 
         restrict: 'A', 
        }; 
        }) 
+0

タイムアウトとは別に、私が2つのコミットされた行のすぐ下で行うのではなく、 "id"をelem.ready内に表示する方法はありますか? – Vahe

関連する問題