'='의 의미는 무엇입니까? angularJS 지시문에서 범위 선언을 분리합니까?


127

등호 뒤의 물음표에는 특별한 의미가 있습니까? 즉 :

scope: {foo: '=?'}

위의 'foo'를 해결할 수 없으면 '오류를 일으키지 않습니다'를 의미합니까?

답변:


154

예:

'isolate'범위는 부모 범위에서 파생 된 로컬 범위 속성 집합을 정의하는 개체 해시를 사용합니다. 이러한 로컬 속성은 템플릿의 별칭 값을 지정하는 데 유용합니다. 지역 정의는 소스에 대한 지역 범위 속성의 해시입니다.

=또는 =attr-로컬 범위 속성과 속성 값을 통해 정의 된 name의 부모 범위 속성간에 양방향 바인딩을 설정 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


@cebor 그것은 현재 답변에 연결되어 있지만 더 직접적인 링크는 다음과 같습니다. docs.angularjs.org/api/ng/service/…
Jason Axelson

3
개인적으로 나는 그것이 $ compile이 아니라 scope 섹션에 직접 문서화되기를 바랍니다.
Jason Axelson

답변 주셔서 감사합니다, 나는 일년 이상 잘 각도를 사용하고 "=?" 지시문에 옵션. 당신은 내 하루 ;-) 만든
wilblack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.