7

私は多くの回避策を実行し、検索して調査しましたが、目標を達成する方法がわかりません。

- 問題:

  • 次のような状況があります。ユーザーが契約でコミッションの日付を重複させないようにしたいです。ユーザーが新しいコミッションを追加すると、ngRepeat で生成されたコミッションが追加されたリストが表示されます。これには、ユーザーが日付を編集することが難しいという問題があります。契約の一部では、契約を編集するには別の画面に移動して編集する必要があるため、これは問題ではありません。同じビューで日付を変更することはできません。

-私が混乱するところ:

  • 追加されたコミッションを編集するときは、以前に追加されたものと比較する必要があるため、コミッションのすべての日付が定義されたリストが必要であり、機能に請求するディレクティブで言うことができます編集中のコミッションの日付を除くすべての日付のリストを返します。

-どのように解決したいですか:

  • 私はこのようなことをしたい:

<input type="text" name="newComission_dateFrom" ng-model="newCommission.from" notincluded=myFunction({{$index}})/>

関数 myFunction は、すべての addedCommissionsDates を含むリストを反復処理し、addedCommissionsDates[index] に含まれる範囲を除くすべての日付範囲と比較します。

目的は、分離スコープを使用せずに属性の式を評価できるようにすることです。

私は孤立したスコープで多くの問題を抱えていましたが、この投稿に同意しました:

ディレクティブを作成するとき、新しいスコープが不要か、新しい子スコープが必要か、新しい分離スコープが必要かをどのように判断すればよいですか? .


編集 ngRequire は ng-require="aFunction()" を受け入れることができるため、ngRequire の実装方法を調べていました。$parsers を使用して、ディレクティブでこの目標に到達しました。これで、関数を実行できます。 これを使用してある程度の進歩を遂げましたが、ディレクティブで関数を実行した結果を取得したいのですが、このようなものに到達したいです

rangeToEval = //関数または式の結果。

ngRepeat を持っているものを見ると、この関数を返す値がどのスコープにあるかわかりません

if(attrs.notincluded) {
            var notIncludedValidator = function(value) {
            ngModelCtrl.$setValidity('notincluded', !attrs.notincluded);
            return value;
        };
    }

ブール値を使用しているため、すべてうまく機能しますが、属性notincludedで式を実行した結果であるリストを使用したい

//この入力は ng-repeat の一部です

<input type="text" ng-model="commission.date" ng-required="true" notincluded="filterDatesFn({{$index}})" />

コントローラーに関数があります:

$scope.filterDatesFn = function(index) {
        // in this list, we will add the dates of the defined commissions
        if($scope.addedCommisionsDate) {
            var listToEvalue= [];
            for ( var i = 0; i < $scope.addedCommisionsDate.length; i++) {
                if(i != index) {
                    listToEvalue.push($scope.addedCommisionsDate[i]);
                }
            }
            return listToEvalue;
        }
    };

したがって、私の次の目標は次のように変更できます。

if(attrs.notincluded) {
            var notIncludedValidator = function(value) {
            --put the listToEvalue here and do my comparations and validate or invalidate the form in base of the comparation That I do here. 
            return value;
        };
    }

この研究の進捗状況を投稿します。

誰かがアイデアを助けたり共有したりできることに感謝します

また後で!

4

1 に答える 1