'=' kelimesinin anlamı nedir? angularJS yönergesinde yalıtım kapsamı bildirimi?


127

Eşitten sonraki soru işaretinin özel bir anlamı var mı? yani:

scope: {foo: '=?'}

Yukarıdakiler, 'foo' çözülemezse 'hata yapma' anlamına mı geliyor?

Yanıtlar:


154

Evet:

'Yalıtım' kapsamı, üst kapsamdan türetilen bir dizi yerel kapsam özelliğini tanımlayan bir nesne karma değerini alır. Bu yerel özellikler, şablonlar için değerleri takma ad olarak kullanmak için kullanışlıdır. Yereller tanımı, kaynağına yerel kapsam özelliğinin bir karmasıdır:

=veya =attr- yerel bir kapsam özelliği ile attrözniteliğin değeri aracılığıyla tanımlanan adın üst kapsam özelliği arasında iki yönlü bağlanma oluşturun . Herhangi bir attrad belirtilmezse, öznitelik adının yerel adla aynı olduğu varsayılır. Verilen <widget my-attr="parentModel">ve pencere öğesi tanımı scope: { localModel:'=myAttr' }, bu durumda pencere öğesi kapsam özelliği , üst kapsamdaki localModeldeğerini yansıtır parentModel. Herhangi bir değişiklik için parentModelyansıtılacaktır localModelve herhangi bir değişiklik localModelolarak etkiler parentModel. Üst kapsam özelliği yoksa, bir NON_ASSIGNABLE_MODEL_EXPRESSION istisnası atar. Özelliği isteğe bağlı olarak işaretlemek için =?veya kullanarak bu davranıştan kaçınabilirsiniz =?attr.

Kapsam özelliğini etkileyen her özette beklenen hatayı tetiklemelidir:

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
Mantıklı ama neden bu yönerge istisna oluşturmuyor? üst kapsam özelliği mevcut değil ve kapsam ataması '=?' KULLANILMIYOR
Nikita

7
Hatayı yalnızca değer ayarlandığında atıyor
Matt Zeunert

@cebor Şu anda yanıtta bağlantılı, ancak burada daha doğrudan bir bağlantı var: docs.angularjs.org/api/ng/service/…
Jason Axelson

3
Kişisel olarak, $ compile olarak değil, doğrudan kapsam bölümünde belgelenmesini diliyorum.
Jason Axelson

Cevabınız için teşekkürler, bir yılı aşkın süredir açısal kullanıyorum ve "=?" bir yönerge üzerine seçenek.
Günümü
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.