Czy ktoś wie, czy powodem użycia metod i zmiennych dolarowych w angularJS jest poinstruowanie angularJS, aby unikał sprawdzania tych wartości, gdy trwa trawienie? Tak więc, jeśli pojawi się angular $scope.$value
i $scope.value
, to uniknie sprawdzenia tego pierwszego, ponieważ jest poprzedzony znakiem dolara w nazwie zmiennej?
129
$scope
, ale dyrektywa mascope
. WTF?Odpowiedzi:
Jest kilka razy, gdy Angular ignoruje zmienne poprzedzone znakiem dolara:
Podczas korzystania z
{{ }}
dyrektywy angular nie pokaże zagnieżdżonych$
zmiennych. Na przykład to wyświetla tylkovisible
właściwość.<div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
Dodatkowo, podczas dodawania jawnego obserwatora do obiektu zakresu, zmiany właściwości z wiodącym znakiem dolara tego obiektu nie będą wyzwalać obserwatora. Zobacz to zaktualizowane skrzypce .
angular.equals()
ignoruje klucze z prefiksem$
.źródło
To tylko konwencja nazewnictwa z poniższego fragmentu http://docs.angularjs.org/tutorial/step_05
http://docs.angularjs.org/guide/concepts#angular_namespace
źródło
$scope
w kontrolerze, alescope
w dyrektywie? --- [1] docs.angularjs.org/guide/directive$
Przedrostek oznacza zmienną, parametr lub właściwość sposobu, który należy do rdzenia kątowych.Właściwości obiektów, które pochodzą z frameworka, ale w rzeczywistości nie są częścią API, mogą zaczynać się od
$
- a nawet$$
- oznaczać prywatną metodę lub właściwość. W ten sam sposób_
przedrostek jest często używany w innych bibliotekach.Nie ma to żadnego wpływu na sposób, w jaki kod jest interpretowany przez środowisko wykonawcze, chociaż sam framework może nadać mu specjalne znaczenie. Zasadniczo jest to konwencja nazewnictwa, która mówi: „Nie powinieneś z tym bawić”.
źródło
$$__$_$
- to tylko identyfikator bez specjalnego znaczenia dla tłumacza.Nie jestem do końca pewien, ale uważam, że wewnętrzne funkcje AngularJS polegają na manipulowaniu tymi zmiennymi z prefiksem $ podczas podsumowania. Sprawdzenie tych zmiennych oznaczałoby, że podsumowanie nigdy się nie ustabilizuje, ponieważ mogą się one stale zmieniać podczas każdego cyklu podsumowania.
Nie cytuj mnie jednak. :)
źródło
Zawsze myślałem, że
$
wygląda jak „S” za obsługę.źródło
Znaki dolara ( $ ) uniemożliwiają również iterację (lub interpretację) elementów w niektórych dyrektywach. Na przykład właściwości zaczynające się od $ nie są używane z
ng-repeat
powodu klauzuli if w pętli for :if(collection.hasOwnProperty(key) && key.charAt(0) != '$')
Ktoś zgłosił problem dotyczący tego tematu na stronie Angulars na githubie
We
shallowCopy
właściwościach metody zaczynających się od $$ są pomijane z powodu klauzuli if podczas iteracji właściwości :if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
źródło
@MarcoS podał link do https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope, który wyjaśnia różnicę między $ scope a scope. Uznałem to za przydatne, uzupełniając informacje w innych odpowiedziach.
W dyrektywie kątowej jest łącze i kontroler. Link jest standardową funkcją o ustalonym zestawie parametrów: zakres, element, obiekt atrybutów.
Argumenty kontrolera są zarządzane przez wtryskiwacz Angular i nie są zależne od kolejności. Wtryskiwacz ustala, które obiekty mają zostać przekazane, wyszukując parametry zaczynające się od $.
Autor https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope lepiej to wyjaśnia.
źródło
Jest ogromna różnica, nie w zmiennych, ale w parametrach, które otrzymuje kontroler. Parametr zasięgu jest zupełnie inny niż parametr $ scope.
Więcej informacji znajdziesz w tym przydatnym poście: http://www.thinkster.io/angularjs/aw9kWmdnik/angularjs-scope-vs-scope
źródło