AngularJS та його використання доларових змінних


128

Хтось знає, чи міркування щодо використання методів і змінних доларів у angularJS полягає в тому, щоб доручити angularJS уникати перевірки цих значень під час травлення? Отже, якщо кутовий наштовхується на $scope.$valueі $scope.value, то це дозволить уникнути перевірки колишнього, оскільки в його назві змінної це префікс із символом долара?


Дивіться також цю публікацію в щоденнику про різницю "$ obseg" та "сфера" у angularjs ...
MarcoS

19
Angular, ймовірно, намагається забрати $ у jQuery.
daniel1426

Це посилання переспрямовує на сторінку, яка не пояснює багато про область застосування $.
Пол Браннан

5
Документи для директиви - контролера є $scope, але директива має scope. WTF?
LeeGee

Відповіді:


87

Кілька разів кутова ігнорує змінні з префіксом знака долара:

  1. У коментарі Schumli нижче, де json фільтри не виводять їх
  2. При використанні {{ }}директиви у кутових не відображатимуться вкладені $ змінні. Наприклад, це відображає лише visibleвластивість.

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
  3. Крім того, додаючи явний спостерігач на об'єкт області, зміни властивостей з провідним знаком долара цього об'єкта не запускають його. Дивіться цю оновлену загадку .

  4. angular.equals() ігнорує ключі з префіксом$ .


Так, схоже, ти маєш рацію. Навіть із подіями натискання тощо - це все-таки змінюється. Дякую.
мацько

7
Є певні частини Angular, які ігнорують префіксні властивості, наприклад, фільтр 'json' не виводить змінну, починаючи з '$'.
Шмулі

116

Це лише угода про іменування з фрагмента нижче http://docs.angularjs.org/tutorial/step_05

Конвенція про іменування префіксу '$'
Ви можете створити власні послуги, і ми дійсно зробимо саме це на кроці 11. Як умова іменування, вбудовані сервіси angular, методи застосування та деякі інші кутові API мають префікс '$' перед іменем. Не використовуйте префікс '$' під час іменування своїх служб та моделей, щоб уникнути можливих зіткнень з іменами.

http://docs.angularjs.org/guide/concepts#angular_namespace

Кутовий простір імен
Щоб запобігти випадковому зіткненню імен, кутові префікси назви об'єктів, які потенційно можуть стикатися з $. Будь ласка, не використовуйте префікс $ у своєму коді, оскільки він може випадково зіткнутися з кутовим кодом.


2
Чому директива doc [1] має $scopeконтролер, а не scopeдирективу? --- [1] docs.angularjs.org/guide/directive
LeeGee

2
@LeeGee Це просто умова. stackoverflow.com/a/19289054/114558
rinogo

30

$Префікс позначає змінну, параметр, властивість або метод , який належить до ядра кутовий.

Властивості об’єктів, які походять всередині рамки, але насправді не є частиною API, можуть починатися з $або навіть навіть $$для позначення приватного методу чи властивості. Таким же чином _префікс часто використовується в інших бібліотеках.

Це не впливає на те, як інтерпретується код під час виконання, хоча сам фреймворк може надати йому особливого значення. В основному, це конвенція про іменування, яка говорить "Ви не повинні з цим возитися".


Я думаю, ти неправильно розумієш. Виконання НЕ все одно , що змінні називаються. Ви можете назвати це $$__$_$- це просто ідентифікатор, який не має особливого значення для перекладача.
dalgard

Я додав кілька слів, щоб підкреслити різницю між часом виконання та рамкою; будьте ласкаві, щоб змінити свій голос.
далгард

7

Не повністю впевнений, але я вважаю, що внутрішні користувачі AngularJS покладаються на маніпулювання цими $ -префіксними змінними під час дайджесту. Перевірка цих змінних означатиме, що дайджест ніколи не стабілізується, оскільки вони можуть постійно змінюватися протягом кожного циклу дайджесту.

Не цитуйте мене, хоча. :)


10
Оскаржений через: "Не цитуйте мене на цьому". Вибачте, але відповідь, яка визнає невизначеність, не дуже корисна :(
Девід Ріверс

2
Downvote перетворений на верхній. Якщо припустити, що ви праві, це корисна відповідь!
Девід Ріверс

2
@DavidRivers, якщо відповідь спочатку надійшов як вагається, переформулювання її не зробить її кориснішою. Насправді, відповідь може бути неправильною, і відсутність вагань стверджує потенційну неправильність . Натомість, щоб цю відповідь вважати корисною, її слід підкріпити деякими доказами, посилаючись на довірені джерела, або надати загадку для відтворення виражених моментів.
Івайло Славов

1
@IvayloSlavov: Я абсолютно з вами згоден. Я припускав (можливо, неправильно), що відповідач ще раз перевірив, що він правий, і не просто переформулював відповідь, щоб усунути невизначеність. Я гадаю, що я мав би хотіти джерел або загадок.
Девід Ріверс

1
@AlexFord: Гей, чоловіче. Дякуємо за вибачення! Вибачте, що я не зрозуміла і все-таки розпочала все це невміння. Ваша думка дійсна, і я з вами згоден. Я просто хотів переконатися, що мене не викривляють, але я не був зрозумілий із власним формулюванням. У будь-якому випадку, ніяких важких почуттів, і я дуже поважаю те, що ви змогли побачити мою точку зору. Будьте здорові, чоловіче!
Девід Ріверс

5

Я завжди вважав, що $схожий на "S" для обслуговування.


це правильна відповідь. Це логічно і просто. Насправді це сервіси, тому краще пам'ятати, що $ 'S' призначений для обслуговування. приємне просте пояснення.
Йонк

2
$ range - це послуга?
деденд

5

Знаки долара ( $ ) також запобігають ітерації (або інтерпретації) елементів у певних директивах. Так, наприклад, властивості, що починаються з $ , не використовуються ng-repeatчерез статтю if у циклі for :

if(collection.hasOwnProperty(key) && key.charAt(0) != '$')

Хтось зробив проблему з цієї теми тут на сторінці кутів github


У методі shallowCopyвластивості, які починаються з $$ , пропускаються через пункт if, якщо повторюється пропеєр :

if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {

1

@MarcoS надав посилання на https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope, що пояснює різницю між $ range та сферою застосування. Я вважав це корисним, додаючи інформацію до інших відповідей.

У кутовій директиві є зв'язок і контролер. Посилання - це стандартна функція з фіксованим набором параметрів: область, елемент, атрибут об'єкта.

Аргументи контролера керуються кутовим інжектором і не залежать від порядку. Інжектор вирішує, які об’єкти передавати, шукаючи параметри, починаючи з $.

Автор https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope робить кращу роботу, щоб пояснити це.


-1

Існує величезна різниця не в змінних, а в параметрах, які отримує контролер. Параметр області повністю відрізняється від параметра $ range.

Для отримання додаткової інформації ознайомтесь з цією корисною публікацією: http://www.thinkster.io/angularjs/aw9kWmdnik/angularjs-scope-vs-scope

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.