2016-09-21 3 views
1

私は、特定の検証が必要なフォームを持っています。私は、同じデータを表示する2つのドロップダウン(有効期限付きこの場合、プロモーションコードを)持っている。..有効期限に基づくアンギュラ・アレイの削除

だから私の最初のドロップダウンがプロモーションコードであるある:

<div class="input-group col-sm-12 col-md-12 col-lg-12"> 
    <span style="min-width: 150px;" class="input-group-addon promo-select">Select Promo Code</span> 
    <select id="offer_promo" name="offer_promo" class="form-control" ng-change="promoAction()" 
        ng-model="promo" 
        ng-options="p.Promo_ID as p.Promo_Code + ' (' + p.Promo_Description + ')' for p in promos"> 
     <option value="">Please Select A Promotion</option> 
    </select> 
</div> 

だから私の2番目のドロップダウンがこれです追加のプロモーションコード:

$scope.promoFilter = function() { 
    function promosFilteredBy(date) { 
    var filteredPromos = $scope.addPromos.filter(function(addPromos) { 
     console.log(filteredPromos); 
     var promoDate = new Date($scope.promo_expiration); 
     return promoDate < date; 
    }); 
    return filteredPromos; 
    } 

    var selectedPromoDate = new Date($scope.promo_expiration); 
    $scope.addPromos = promosFilteredBy(selectedPromoDate); 
}; 
:ここ

<div data-ng-show="(offer.is_primary === 1)" class="input-group col-sm-12 col-md-12 col-lg-12"> 
     <span class="input-group-addon">Additional Code</span> 
     <select ng-disabled="additionalCodeDisabled" id="offer_promo_add" name="offer_promo_add" class="form-control" ng-model="addPromo" 
        ng-options="p.Promo_Code as p.Promo_Code + ' (' + p.Promo_Description + ')' for p in addPromos"></select> 
</div> 

は私がpromoAction内呼び出しています私のフィルタコントローラです

私のコントローラ内では、空の配列を取得しています。またはfilteredPromosには未定義です。フィルタ機能が正しく動作していないので、どこにいなくなっているのかわかりません。

私の問題は、ユーザーが最初のドロップダウンにプロモーションコードを選択したときに、それはあなたが選択した内容に基づいて、特定の期間満了コードを持って入って来。だから私は追加プロモーションコード内のすべてのコードを削除したいと言います2番目のドロップダウンは、より高いです。 .slice()は時間順ではないので使用できません。私は自分の日付にmomment.jsを使用しているので、日付を比較するために.isBefore()を使用する可能性があります。

例を示します。最初のプルダウンで「25ANC」を選択します。 promo_expiration:「01/30/2017」。その日付を過ぎた追加のプロモーションドロップダウンの項目は、ドロップダウンから削除する必要があります。

私は現在、プロモーションやaddPromoのためにNG-モデルを見ている$の時計機能を持っています。私は、日付の検証に合致しないプロモーションコードをスライスしてスライスする機能を作成する必要があることを知っています。しかし、その関数をどのように作成すればよいのですか?その関数をどこで呼び出すべきですか?私はコードの任意のセクションをしないのです場合

、私はそれを提供することができます私に知らせてください。

+0

魔法を実行するためにpromoAction()コールを使用する必要があると書いていましたが、例として2つの同様のコードスニペットがあります。 –

答えて

0

私はmomentjsを使用して2つを比較する修正を見つけました。私は、プロモーションを実行し、フィルタによって提供されたものを返し、それをaddPromosとして配置しました。

$scope.promoFilter = function(promo_expiration) { 
     function promosFilteredBy(promo_expiration) { 
     return $scope.promos.filter(function(promo) { 
      return moment(promo_expiration).isBefore(promo.Expiration_Date); 
     }); 
     } 
     $scope.addPromos = promosFilteredBy(promo_expiration); 
}; 
1

あなたは間違いなくng-change関数にバインドしたいのですが、おそらく唯一のあなたの最初のドロップダウンで(最初のドロップダウンから選択するC/B 2番目のドロップダウンのためのプロモーションをフィルタリングするためのトリガである)されます。

Here is a plunker

pだけではなくp.Promo_IDするng-optionsを変更すると、私たちは$scope.promo.Promo_EXPで選択したプロモーションの有効期限にアクセスし、それに他のプロモーションの日付を比較することができることを意味、ng-modelに完全なプロモーションオブジェクトをバインドします。

というスコープ変数にバインドされた2番目のドロップダウンリストは、$scope.promoAction()で作成され、基本的にはフィルタリングされた「有効な」プロモーションの配列です(これは、最初のドロップダウン)。

それが100%に合わないかもしれないので、私はあなたの完全な実装を見ていませんでしたが、うまくいけばそれが役立ちます。

+0

私は上記のコードを更新して、どこに行き詰まっているのかをより深く理解できるようにしました。私はフィルターのルートが最高になると思っていますが、潜在的なスコープの問題のために適切な場所に機能を実装することがまだできません。 – Jaser

関連する問題