Угловые используют инъекции зависимостей. $ scope - это введенное значение. Это по существу объект, содержащий все ссылки ng-
внутри относительного контроллера для этого модуля.
«Модуль представляет собой набор услуг, директив, контроллеров, фильтров и информации о конфигурации». - angular source
Когда вы получаете доступ к чему-либо из коллекции, содержащейся в модуле, область применения этого доступа вводится.Например, при создании модуля, модуль создает свойство контроллера
/**
* @ngdoc method
* @name angular.Module#controller
* @module ng
* @param {string|Object} name Controller name, or an object map of controllers where the
* keys are the names and the values are the constructors.
* @param {Function} constructor Controller constructor function.
* @description
* See {@link ng.$controllerProvider#register $controllerProvider.register()}.
*/
controller: invokeLater('$controllerProvider', 'register'),
Это свойство регистрируется с controllerProvider.
Контроллер инъекционный (и поддерживает кронштейн нотации) со следующими> местными жителями:
*
* * $scope
- Текущая сфера, связанная с элементом
Так что, когда вы используете этот код
phonecatApp.controller('PhoneListCtrl', function($scope){
Что вы делаете доступа к контроллеру 'PhoneListCtrl
от поставщика контроллера, d затем предоставленная функция вызывается с соответствующей областью, сохраненной с PhoneListCtrl
для этого модуля.
С особым отношением к имени переменной $scope
, причина, по которой угловой может определить, используете ли вы это «ключевое слово», - это процесс регулярного выражения. Если вы используете .toString() для функции, она преобразует всю вещь в строку, и вы сможете ее проанализировать, чтобы увидеть, что было в этой функции. Угловая делает это,
«Простейшая форма является извлечение зависимости от аргументов функции. Это делается путем преобразования функции в строку с помощью метода toString()
и извлечения имен аргументов.»
Регулярное выражение определяется в угловой, как var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
Вы можете проверить с помощью этого на https://regex101.com/r/qL4gM8/1
Так что, как Угловое знает, что вы использовали в ваших параметрах функции переменной $scope
.
$ scope - это область, в которой вы сохраняете значения и функции, которые вы хотите видеть пользователю. Все, что вы хотите связать с элементом, вы добавляете в $ scope. Читайте о цикле дайджеста, если вы хотите узнать больше об этом. > Что меня удивляет, так это то, что при изменении имени переменной $ scope код, похоже, не работает. Это связано с тем, что угловое применение требует инъекции по всему месту. –
мое сомнение больше javascript чем угловые js. Как получается значение переменной $ scope вне функционального блока? его не возвращает $ scope также $ scope не глобально –
Внешняя угловая или функция контроллера? – squiroid