0

私のプロジェクトには 2 つのディレクティブがあります。ユーザー定義の最小値と最大値を使用した数値の書式設定と、浮動小数点数用と整数用のシンボルを使用して書式設定する機能が可能です。ディレクティブのモック モデルを作成しました (たとえば、jGrowl を追加しておらず、制限はフィールドには適用されず、ng-model にのみ適用されます) が、一度に保存される値は 1 つだけです。フォーマットと視覚的な側面から、私のプロジェクトの機能は完璧です。しかし、値を保持するには、モデル内のすべての値が必要です。

{ "varA": "1173", "varB": "153", "varC": "153", "varD": "000000153" }
not { "varC": "153.00" }  or { "varA": "1173.00" } etc...

問題は戻り値と $setViewValue(); にあると思います。および $render(); しかし、さらにreturnステートメントを追加しましたが、問題は解決しません。

http://jsfiddle.net/yxRR8/2/

4

2 に答える 2

0

あなたのフィドルは非常に長いので、すべてを読んだわけではありませんが、親スコープにデータバインディングしていないことが問題だと思います。デフォルトでは、ディレクティブには分離スコープがあります。次のようなものを使用します

scope: {var: '='}

ディレクティブ定義で。

この質問を参照してください 。AngularJS におけるスコープ プロトタイプ/プロトタイプ継承のニュアンスは何ですか? 特に、ディレクティブに関する部分。

于 2013-11-05T16:43:40.073 に答える
0

「keydown」イベントに関連付けられた element.bind で modelCtrl.$parsers.push() をラップすることで、キーと値のペアが削除されないようにすることができました。これにより、ディレクティブがループして null 値を返すことがなくなりました。

element.bind('keydown', function() {
    modelCtrl.$parsers.push(function(inputValue) {
        showAlert("Parse", 1);

        if (!prev) {
            prev = false;
            var returnVal = checkVal(inputValue, modelCtrl, "I", true, minVal, maxVal);

            if (String(returnVal) === ".") {
                setAndRender(modelCtrl, "");
                return "";
            }
            else {
                return returnVal;
            }
        }
        return String(inputValue).replace(/[^0-9 . -]/g, '');
    });
});
于 2013-11-08T04:28:04.340 に答える