Câu trả lời:
Phạm vi 'cô lập' lấy hàm băm đối tượng xác định một tập các thuộc tính phạm vi cục bộ xuất phát từ phạm vi cha. Các thuộc tính cục bộ này rất hữu ích cho các giá trị răng cưa cho các mẫu. Định nghĩa địa phương là một hàm băm của thuộc tính phạm vi cục bộ đối với nguồn của nó:
=
hoặc=attr
- thiết lập liên kết hai chiều giữa thuộc tính phạm vi cục bộ và thuộc tính phạm vi cha của tên được xác định thông qua giá trị củaattr
thuộc tính. Nếu không cóattr
tên nào được chỉ định thì tên thuộc tính được coi là giống với tên cục bộ. Do<widget my-attr="parentModel">
và định nghĩa phụ tùng củascope: { localModel:'=myAttr' }
, sau đó sở hữu phạm vi phụ tùnglocalModel
sẽ phản ánh giá trịparentModel
trên phạm vi phụ huynh. Mọi thay đổiparentModel
sẽ được phản ánhlocalModel
và mọi thay đổi tronglocalModel
sẽ phản ánhparentModel
. Nếu thuộc tính phạm vi cha không tồn tại, nó sẽ ném ngoại lệ NON_ASSIGNABLE_MODEL_EXPRESSION. Bạn có thể tránh hành vi này bằng cách sử dụng=?
hoặc=?attr
để gắn cờ tài sản là tùy chọn.
Nó sẽ kích hoạt lỗi dự kiến trên mỗi thông báo ảnh hưởng đến thuộc tính phạm vi:
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]);
}
}