Czy znak zapytania po równych ma specjalne znaczenie? to znaczy:
scope: {foo: '=?'}
czy powyższe oznacza „nie zgłaszaj błędu, jeśli„ foo ”nie może zostać rozwiązane?
źródło
Czy znak zapytania po równych ma specjalne znaczenie? to znaczy:
scope: {foo: '=?'}
czy powyższe oznacza „nie zgłaszaj błędu, jeśli„ foo ”nie może zostać rozwiązane?
Zakres „izolowany” pobiera skrót obiektu, który definiuje zestaw właściwości zakresu lokalnego pochodzącego z zakresu nadrzędnego. Te właściwości lokalne są przydatne do tworzenia aliasów wartości szablonów. Definicja lokalna to skrót własności zakresu lokalnego do jej źródła:
=
lub=attr
- skonfiguruj dwukierunkowe wiązanie między właściwością zakresu lokalnego a właściwością zakresu nadrzędnego nazwy zdefiniowaną za pomocą wartościattr
atrybutu. Jeśli nieattr
określono nazwy, zakłada się, że nazwa atrybutu jest taka sama jak nazwa lokalna. Podana<widget my-attr="parentModel">
definicja widżetu iscope: { localModel:'=myAttr' }
właściwość zakresu widżetulocalModel
będzie odzwierciedlać wartośćparentModel
zakresu nadrzędnego. Wszelkie zmiany w programieparentModel
zostaną odzwierciedlone w programie,localModel
a wszelkie zmiany w programielocalModel
będą odzwierciedlone w programieparentModel
. Jeśli właściwość zakresu nadrzędnego nie istnieje, zgłosi wyjątek NON_ASSIGNABLE_MODEL_EXPRESSION. Możesz uniknąć tego zachowania, używając=?
lub=?attr
w celu oznaczenia właściwości jako opcjonalnej.
Powinien wywołać oczekiwany błąd w każdym podsumowaniu, który wpływa na właściwość zakresu:
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]);
}
}