เครื่องหมายคำถามหลังเท่ากับมีความหมายพิเศษหรือไม่? เช่น:
scope: {foo: '=?'}
ข้างต้นหมายความว่า 'ไม่เพิ่มข้อผิดพลาดถ้า' foo 'ไม่สามารถแก้ไขได้?
เครื่องหมายคำถามหลังเท่ากับมีความหมายพิเศษหรือไม่? เช่น:
scope: {foo: '=?'}
ข้างต้นหมายความว่า 'ไม่เพิ่มข้อผิดพลาดถ้า' foo 'ไม่สามารถแก้ไขได้?
คำตอบ:
ขอบเขต 'แยก' ใช้แฮชวัตถุซึ่งกำหนดชุดของคุณสมบัติขอบเขตโลคัลที่ได้มาจากขอบเขตหลัก คุณสมบัติโลคัลเหล่านี้มีประโยชน์สำหรับการกำหนดค่านามแฝงสำหรับเทมเพลต นิยามโลคัลคือแฮชของคุณสมบัติขอบเขตโลคัลไปยังแหล่งที่มา:
=
หรือ=attr
- ตั้งค่าการผูกแบบสองทิศทางระหว่างคุณสมบัติขอบเขตโลคัลและคุณสมบัติขอบเขตหลักของชื่อที่กำหนดผ่านค่าของattr
แอตทริบิวต์ หากไม่มีการattr
ระบุชื่อชื่อแอ็ตทริบิวต์จะถือว่าเหมือนกับชื่อโลคัล กำหนด<widget my-attr="parentModel">
และกำหนด วิดเจ็ตของscope: { localModel:'=myAttr' }
คุณสมบัติขอบเขตวิดเจ็ตlocalModel
จะสะท้อนถึงค่าของparentModel
ขอบเขตพาเรนต์ การเปลี่ยนแปลงใด ๆparentModel
จะปรากฏในlocalModel
และการเปลี่ยนแปลงใด ๆ ใน จะสะท้อนให้เห็นในlocalModel
หากไม่มีคุณสมบัติขอบเขตหลักมันจะทำให้เกิดข้อยกเว้น NON_ASSIGNABLE_MODEL_EXPRESSION คุณสามารถหลีกเลี่ยงพฤติกรรมนี้ได้โดยใช้หรือเพื่อตั้งค่าสถานะคุณสมบัติเป็นทางเลือกparentModel
=?
=?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]);
}
}