0

質問は非常に単純です。入力を一意の ID に連結する angularJs フィルターを作成するにはどうすればよいでしょうか。これは、HTML ID を生成したり、ng-repeat 内の要素のグループに一意の属性値を定義したりするのに非常に役立ちます。

注: ID は「グローバルに」一意である必要があり、Angular ng-repeat は$index役に立たなくなります。

さて、おそらく頭に浮かぶ解決策は次のようなものです。

myModule.filter('uniqueId', function(){ var idCounter = 0; return function(input) { return (input || '') + (++idCounter); }; });

そしてあなたのHTMLに次のようなものを書きます:

<div id="{{groupName | uniqueId}}">

課題は、angular がダイジェスト ループに陥ることです。これは、評価groupName | uniqueIdによって同じ値が得られることはなく、スコープが安定しないことを意味します。

最後に一つだけ。angular v1.2.27 を使用します。これは、angular 1.3 の新しい::(つまり、1 回限りのバインド) 演算子を使用できないことを意味します。

4

1 に答える 1

2

個々のプロパティではなくオブジェクトにバインドできる場合は、次のようなことができます。

オブジェクトの一意の値を確認してください。存在する場合は返却してください。存在しない場合は生成し、割り当てて返します。

myModule.filter('uniqueId', function(){
    var idCounter = 0;
    return function(input) {
        return input.$$uniqueValue || (input.$$uniqueValue = ++idCounter);
    };
});

これで問題が正確に解決されるかどうかはわかりませんが、お役に立てば幸いです。

于 2015-01-12T17:25:15.260 に答える