2016-09-08 4 views
1

私は角度で初心者です。私はこれを完全に間違った方法でやっているとは確信していますが、2度目のクリックでうまくいくので、やっと「いくらか働いて」いるので、私はこの方向に進んでしまいました。AngularJSフィルタは結果をフィルタリングする前に2回クリックする必要があります

フィルタは、最初のクリックの前に「未定義」として初期化されているため、2番目のクリックで並べ替えます。私のHTMLで

:私のコントローラで

<div class="col-xs-12 col-sm-4 location-list" ng-repeat="key in careerlist.location"> 
         <div class="locations" ng-click="careerlist.criteriaMatch()">{{key}} 
         </div> 
        </div> 

<div class="col-xs-12"> 
    <div class="row"> 
     <div class="col-xs-12 col-sm-6 col-md-4 job-container" ng-repeat="job in careerlist.career | filter : searchText | filter: selectExperience | filter: careerlist.criteria.name"> 
      <h2> 
       {{job.title}} 
      </h2> 
      <h3> 
       {{job.location}} 
      </h3> 
      <div class="job-description" ng-bind-html="job.description | limitHtml : 200"> 
      </div> 
      <br><br> 
      <button><a href="{{job.url}}">Read More</a></button> 
     </div> 
     <br><br> 
    </div> 
</div> 

cl.criteriaMatch = function(criteria) { 
      jQuery(document).on('click', '.locations', function(){ 
       cl.criteria = {}; 
       console.log("just the element text " + jQuery(this).text()); 
       cl.criteria.name = jQuery(this).text(); 
       return function(criteria) { 
        return criteria.name === criteria.name; 
       }; 
      }); 

     }; 
+1

Angularではなくクリックイベントを処理するためにjQueryを使用する特別な理由は何ですか? – Makoto

+0

これを再現するために使用できるものがあれば、もう少し速く解決できるでしょう。あなたが持っているコードサンプルは、環境内で実行するのに不完全です。 – Makoto

答えて

0

利用ng-clickの代わりjQuery#on('click')。 Angularは、フィルタを更新する必要があるかどうかを知りません。

更新

@Makotoはクリックが二回バインドされていることを指摘しています。 jQueryバインディングを完全に削除する必要があるようです。私はあなたのプロジェクトからjQueryを削除することを示唆しています。

+0

彼らはこれを処理するために 'ngClick'と' jquery.on( 'click') 'の両方を使っています。問題はクリックがどのように発生するかではありません。クリックイベントが2回発生すると信じています。 Angularはそれについて一度知り、jQueryだけでそれについて知っています。 – Makoto

+0

これは部分的に正解でした。もう一つの問題は、基準の代わりに$ eventと$ event.currentTargetを追加する必要があることでした。私はあなたにそれをテストさせるのに十分なコードを与えなかったので、あなたは私のために完全に解決できなかったが、あなたの答えは正しい方向に私を導いた。 – Mike

関連する問題