「=」の意味は何ですか angularJSディレクティブでスコープ宣言を分離しますか?


127

等号の後の疑問符には特別な意味がありますか?つまり:

scope: {foo: '=?'}

上記は、「foo」を解決できない場合にエラーを発生させないことを意味しますか?

回答:


154

はい:

'isolate'スコープは、親スコープから派生した一連のローカルスコーププロパティを定義するオブジェクトハッシュを取ります。これらのローカルプロパティは、テンプレートのエイリアス値に役立ちます。ローカル定義は、ソースに対するローカルスコーププロパティのハッシュです。

=または=attr-ローカルスコーププロパティと、attr属性の値を介して定義された名前の親スコーププロパティとの間の双方向バインディングをセットアップします。attr名前を指定しない場合、属性名はローカル名と同じであると見なされます。の <widget my-attr="parentModel">ウィジェット定義を指定するscope: { localModel:'=myAttr' }と、ウィジェットスコーププロパティlocalModelparentModel親スコープのの値を反映します。への変更 parentModelはに反映されlocalModel、への変更は localModelに反映されparentModelます。親スコーププロパティが存在しない場合は、NON_ASSIGNABLE_MODEL_EXPRESSION例外がスローされます。プロパティをオプションとしてフラグを付ける=?=?attr、または使用して、この動作を回避できます。

スコーププロパティに影響するすべてのダイジェストで予期されるエラーをトリガーする必要があります。

parentSet = parentGet.assign || function() {
// reset the change, or we will throw this exception on every $digest
lastValue = scope[scopeName] = parentGet(parentScope);
     throw Error(NON_ASSIGNABLE_MODEL_EXPRESSION + attrs[attrName] +
     ' (directive: ' + newScopeDirective.name + ')');
};

//...


if (parentValue !== scope[scopeName]) {
    // we are out of sync and need to copy
    if (parentValue !== lastValue) {
        // parent changed and it has precedence
        lastValue = scope[scopeName] = parentValue;
    } else {
        // if the parent can be assigned then do so
        parentSet(parentScope, lastValue = scope[scopeName]);
    }
}

1
理にかなっていますが、なぜこのディレクティブは例外をスローしないのですか?親スコーププロパティが存在せず、スコープの割り当てに「=?」を使用していません
Nikita

7
次のように、値が設定されている場合にのみエラーがスローされるようです:plnkr.co/edit/OSpaC6sPE0hY9yAeFghr?p
Matt Zeunert

@cebor現時点では答えにリンクされますが、ここではより多くの直接リンクですだ:docs.angularjs.org/api/ng/service/...
ジェイソンAxelson

3
個人的にはスコープセクションに直接ドキュメント化し、$ compileにドキュメント化しないことを望みます。
Jason Axelson、2015

回答をありがとう、angularを1年以上使用していて、「=?」が見つからなかった ディレクティブのオプション。あなたはちょうど私の日を作った;-)
wilblack '19
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.