0

フィールドの検証を支援するために、Angular でディレクティブを作成しています。バリデーションの結果を保存するところまで動作しています。

のようなオブジェクトに保存したいerror.password.old

これを行うコードは次のようになります。

if(!(typeof iAttrs.ngModel == "undefined"))
{
    var model = iAttrs.ngModel.split('.');
    var length = model.length;
    var target = scope.error;

    if(typeof validation[iAttrs.validate] == "function")
    {
       for(var index = 0; index < length; index++)
       {
           target = target[model[index]];
       }
       target = validation[iAttrs.validate]();
       scope.$apply();
    }
    else throw("function " + iAttrs.validate + " does not exist.");
 }

iAttrs.ngModel は「password.old」を保持しています。

Google は現在スローしています:

キャッチされていない TypeError: 未定義のプロパティ 'old' を読み取ることができません

これは、for ループの 2 回目の反復でスローされます。

未定義であることは理解していますが、通常の {} 表記なしでオンザフライで定義する方法を見つける必要があります。

4

2 に答える 2

0

次のサービスを使用できます$parse: http://docs.angularjs.org/api/ng.$parse

http://jsfiddle.net/4LhN9/27/

于 2012-09-25T17:50:18.987 に答える
0

私はそれを行うために次のコードを使用しています。

 function createObj( str ) {

            var d = str.split("."), j, o = scope.error;
            for (j = 0; j < d.length; j = j + 1) {
                o[d[j]] = o[d[j]] || {};
                o = o[d[j]];
            }
            return o;
        }

    createObj(iAttrs.ngModel);
于 2012-09-25T16:42:53.740 に答える