Spec-Zone.ru › Angular.js 1.3

Улучшить эту документацию Посмотреть исходный код $rootScope.Scope

  1. тип в модуле ng

Корневой контекст может быть получен с помощью ключа $rootScope из $injector. Дочерние контексты создаются с помощью метода $new(). (Большинство контекстов создаются автоматически при выполнении компиляции HTML-шаблона.) Подробное введение и примеры использования см. в руководстве по контекстам.

Наследование

Контекст может унаследовать от родительского контекста, как в этом примере:

var parent = $rootScope;
var child = parent.$new();

parent.salutation = "Hello";
expect(child.salutation).toEqual('Hello');

child.salutation = "Welcome";
expect(child.salutation).toEqual('Welcome');
expect(parent.salutation).toEqual('Hello');

При взаимодействии с Scope в тестах на экземплярах типа Scope доступны дополнительные вспомогательные методы. Дополнительные сведения см. в разделе ngMock Scope.

Использование

$rootScope.Scope([providers], [instanceCache]);

Аргументы

Параметр Тип Подробности
providers
(необязательно)
Object.<string, function()>=

Словарь фабрик сервисов, которые необходимо предоставить для текущего контекста. По умолчанию ng.

instanceCache
(необязательно)
Object.<string, *>=

Предоставляет предварительно инициализированные сервисы, которые должны добавляться/переопределять сервисы, предоставляемые providers. Это удобно при тестировании компонентов и необходимости переопределения стандартного сервиса.

Возвращаемое значение

Object

Созданный контекст.

Методы

  • $new(isolate, parent);

    Создаёт новый дочерний объект.

    Родительский объект будет распространять событие $digest(). Объект можно удалить из иерархии объектов, используя $destroy().

    $destroy() необходимо вызывать для объекта, когда требуется, чтобы объект и его дочерние объекты были окончательно отделены от родителя и, следовательно, перестали участвовать в обнаружении изменений модели и уведомлении слушателей, вызывая.

    Параметры

    Параметр Тип Подробности
    isolate boolean

    Если true, то объект не наследует прототип от родительского объекта. Объект изолирован, так как не может видеть свойства родительского объекта. При создании виджетов полезно, чтобы виджет случайно не считывал состояние родителя.

    parent
    (необязательно)
    Scope

    Объект Scope, который будет $parent нового созданного объекта. По умолчанию this объект, если не указано. Это используется при создании транклюдируемого объекта, чтобы правильно поместить его в иерархии объектов, сохраняя при этом правильное прототипное наследование.

    (по умолчанию: this)

    Возвращаемое значение

    Object

    Новый созданный дочерний объект.

  • $watch(watchExpression, listener, [objectEquality]);

    Регистрирует listener обратный вызов, который выполняется всякий раз, когда watchExpression изменяется.

    • watchExpression вызывается при каждом вызове $digest() и должен возвращать значение, за которым будет следить. (Поскольку $digest() повторно выполняется, когда обнаруживаются изменения, watchExpression может выполняться несколько раз за один $digest() и должен быть идемпотентным.)
    • listener вызывается только тогда, когда значение от текущего watchExpression и предыдущего вызова watchExpression не равны (за исключением начального запуска, см. ниже). Неравенство определяется по принципу неравенства ссылок, строгого сравнения с помощью оператора Javascript !==, если не используется objectEquality == true (см. следующий пункт)
    • Когда objectEquality == true, неравенство watchExpression определяется в соответствии с функцией angular.equals. Для сохранения значения объекта для последующего сравнения используется функция angular.copy. Это означает, что отслеживание сложных объектов будет иметь неблагоприятные последствия для памяти и производительности.
    • Отслеживание listener может изменить модель, что может привести к запуску других listener. Это достигается путём повторного запуска наблюдателей до тех пор, пока не будут обнаружены изменения. Предел итераций повторного запуска составляет 10, чтобы предотвратить тупик бесконечного цикла.

    Если вы хотите быть уведомлены всякий раз, когда вызывается $digest, вы можете зарегистрировать функцию watchExpression без listener. (Будьте готовы к нескольким вызовам вашей функции watchExpression, так как она будет выполняться несколько раз в одном цикле $digest, если обнаружено изменение.)

    После регистрации наблюдателя в области, функция listener вызывается асинхронно (через $evalAsync) для инициализации наблюдателя. В редких случаях это нежелательно, так как слушатель вызывается, когда результат watchExpression не изменился. Для обнаружения этой ситуации в функции listener, можно сравнить значения newVal и oldVal. Если эти два значения идентичны (===), значит слушатель был вызван из-за инициализации.

    // let's assume that scope was dependency injected as the $rootScope
    var scope = $rootScope;
    scope.name = 'misko';
    scope.counter = 0;
    
    expect(scope.counter).toEqual(0);
    scope.$watch('name', function(newValue, oldValue) {
      scope.counter = scope.counter + 1;
    });
    expect(scope.counter).toEqual(0);
    
    scope.$digest();
    // the listener is always called during the first $digest loop after it was registered
    expect(scope.counter).toEqual(1);
    
    scope.$digest();
    // but now it will not be called unless the value changes
    expect(scope.counter).toEqual(1);
    
    scope.name = 'adam';
    scope.$digest();
    expect(scope.counter).toEqual(2);
    
    
    
    // Using a function as a watchExpression
    var food;
    scope.foodCounter = 0;
    expect(scope.foodCounter).toEqual(0);
    scope.$watch(
      // This function returns the value being watched. It is called for each turn of the $digest loop
      function() { return food; },
      // This is the change listener, called when the value returned from the above function changes
      function(newValue, oldValue) {
        if ( newValue !== oldValue ) {
          // Only increment the counter if the value changed
          scope.foodCounter = scope.foodCounter + 1;
        }
      }
    );
    // No digest has been run so the counter will be zero
    expect(scope.foodCounter).toEqual(0);
    
    // Run the digest but since food has not changed count will still be zero
    scope.$digest();
    expect(scope.foodCounter).toEqual(0);
    
    // Update food and run digest.  Now the counter will increment
    food = 'cheeseburger';
    scope.$digest();
    expect(scope.foodCounter).toEqual(1);
    

    Параметры

    Параметр Тип Подробности
    watchExpression function()string

    Выражение, которое оценивается в каждом цикле $digest. Изменение возвращаемого значения приводит к вызову listener.

    • string: Оценивается как выражение
    • function(scope): вызывается с текущим scope в качестве параметра.
    listener function(newVal, oldVal, scope)

    Обратный вызов, вызываемый всякий раз, когда значение watchExpression изменяется.

    • newVal содержит текущее значение watchExpression
    • oldVal содержит предыдущее значение watchExpression
    • scope относится к текущему объекту
    objectEquality
    (необязательно)
    boolean

    Сравнение на равенство объектов с помощью angular.equals вместо сравнения по ссылке.

    Возвращаемое значение

    function()

    Возвращает функцию отмены регистрации этого слушателя.

  • $watchGroup(watchExpressions, listener);

    Вариант $watch(), где он отслеживает массив watchExpressions. Если какое-либо выражение в коллекции изменяется, выполняется listener.

    • Элементы массива watchExpressions наблюдаются посредством стандартной операции $watch и проверяются при каждом вызове $digest(), чтобы увидеть, изменились ли какие-либо элементы.
    • listener вызывается всякий раз, когда изменяется любое выражение в массиве watchExpressions.

    Параметры

    Параметр Тип Подробности
    watchExpressions Array.<string|Function(scope)>

    Массив выражений, которые будут индивидуально отслеживаться с помощью $watch()

    listener function(newValues, oldValues, scope)

    Обратный вызов, вызываемый всякий раз, когда изменяется возвращаемое значение любого выражения в watchExpressions Массив newValues содержит текущие значения watchExpressions, индексы которых соответствуют индексам watchExpression, и массив oldValues содержит предыдущие значения watchExpressions, индексы которых соответствуют индексам watchExpression. scope относится к текущему объекту.

    Возвращаемое значение

    function()

    Возвращает функцию отмены регистрации всех слушателей.

  • $watchCollection(obj, listener);

    Поверхностно отслеживает свойства объекта и срабатывает всякий раз, когда изменяется какое-либо свойство (для массивов это означает отслеживание элементов массива; для карт объектов это означает отслеживание свойств). Если изменение обнаружено, вызывается обратный вызов listener.

    • Коллекция obj наблюдается посредством стандартной операции $watch и проверяется при каждом вызове $digest(), чтобы увидеть, были ли добавлены, удалены или перемещены какие-либо элементы.
    • listener вызывается всякий раз, когда что-либо в obj изменяется. Примеры включают добавление, удаление и перемещение элементов, принадлежащих объекту или массиву.
    $scope.names = ['igor', 'matias', 'misko', 'james'];
    $scope.dataCount = 4;
    
    $scope.$watchCollection('names', function(newNames, oldNames) {
      $scope.dataCount = newNames.length;
    });
    
    expect($scope.dataCount).toEqual(4);
    $scope.$digest();
    
    //still at 4 ... no changes
    expect($scope.dataCount).toEqual(4);
    
    $scope.names.pop();
    $scope.$digest();
    
    //now there's been a change
    expect($scope.dataCount).toEqual(3);
    

    Параметры

    Параметр Тип Подробности
    obj stringfunction(scope)

    Оценивается как выражение. Значение выражения должно оцениваться как объект или массив, который наблюдается в каждом цикле $digest. Любое поверхностное изменение в коллекции приведет к вызову listener.

    listener function(newCollection, oldCollection, scope)

    Функция обратного вызова, вызываемая при обнаружении изменения.

    • Объект newCollection — это новые изменённые данные, полученные из выражения obj
    • Объект oldCollection — это копия предыдущих данных коллекции. По соображениям производительности значение oldCollection вычисляется только если функция listener объявляет два или более аргумента.
    • Аргумент scope относится к текущему объекту.

    Возвращаемое значение

    function()

    Возвращает функцию отмены регистрации этого слушателя. При выполнении функции отмены регистрации внутренняя операция отслеживания завершается.

  • $digest();

    Обрабатывает всех наблюдателей текущего объекта и его потомков. Поскольку слушатель наблюдателя может изменить модель, $digest() продолжает вызывать наблюдателей, пока больше слушателей не будут вызываться. Это означает, что возможен бесконечный цикл. Эта функция выбросит 'Maximum iteration limit exceeded.' если число итераций превысит 10.

    Обычно вы не вызываете $digest() напрямую в контроллерах или в директивах. Вместо этого вы должны вызвать $apply() (обычно из директивы), что принудительно выполнит $digest().

    Если вы хотите быть уведомлены всякий раз, когда вызывается $digest(), вы можете зарегистрировать функцию watchExpression с помощью $watch() без listener.

    В тестах единиц может потребоваться вызвать $digest() для моделирования жизненного цикла объекта.

    var scope = ...;
    scope.name = 'misko';
    scope.counter = 0;
    
    expect(scope.counter).toEqual(0);
    scope.$watch('name', function(newValue, oldValue) {
      scope.counter = scope.counter + 1;
    });
    expect(scope.counter).toEqual(0);
    
    scope.$digest();
    // the listener is always called during the first $digest loop after it was registered
    expect(scope.counter).toEqual(1);
    
    scope.$digest();
    // but now it will not be called unless the value changes
    expect(scope.counter).toEqual(1);
    
    scope.name = 'adam';
    scope.$digest();
    expect(scope.counter).toEqual(2);
    
  • $destroy();

    Удаляет текущий область видимости (и все дочерние области видимости) из родительской области видимости. Удаление подразумевает, что вызовы $digest() больше не будут распространяться на текущую область видимости и ее дочерние области видимости. Удаление также подразумевает, что текущая область видимости может быть удалена сборщиком мусора.

    $destroy() обычно используется директивами, такими как ngRepeat, для управления развёртыванием цикла.

    Непосредственно перед уничтожением области видимости, событие $destroy транслируется в этой области видимости. Код приложения может зарегистрировать обработчик события $destroy, который даст ему возможность выполнить необходимые операции по очистке.

    Обратите внимание, что в AngularJS также есть событие $destroy jQuery, которое можно использовать для очистки привязок к DOM перед удалением элемента из DOM.

  • $eval([expression], [locals]);

    Выполняет expression в текущей области видимости и возвращает результат. Любые исключения в выражении передаются дальше (не перехватываются). Это полезно при оценке выражений Angular.

    var scope = ng.$rootScope.Scope();
    scope.a = 1;
    scope.b = 2;
    
    expect(scope.$eval('a+b')).toEqual(3);
    expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);
    

    Параметры

    Параметр Тип Подробности
    expression
    (необязательно)
    stringfunction()

    Выражение Angular, которое нужно выполнить.

    • string: выполнить по правилам, определённым в выражении.
    • function(scope): выполнить функцию с текущим параметром scope.
    locals
    (необязательно)
    object

    Объект локальных переменных, полезный для переопределения значений в области видимости.

    Возвращаемое значение

    *

    Результат выполнения выражения.

  • $evalAsync([expression], [locals]);

    Выполняет выражение в текущей области видимости в более позднее время.

    $evalAsync не гарантирует, когда expression будет выполнено, только:

    • он выполнится после функции, которая запланировала выполнение (предпочтительно перед рендерингом DOM).
    • будет выполнен хотя бы один $цикл digest после выполнения expression.

    Любые исключения из выполнения выражения передаются сервису $exceptionHandler.

    Примечание: если эта функция вызывается вне цикла $digest, новый цикл $digest будет запланирован. Тем не менее, рекомендуется всегда вызывать код, изменяющий модель, внутри вызова $apply. Это включает в себя код, оцениваемый через $evalAsync.

    Параметры

    Параметр Тип Подробности
    expression
    (необязательно)
    stringfunction()

    Выражение Angular, которое нужно выполнить.

    • string: выполнить по правилам, определённым в выражении.
    • function(scope): выполнить функцию с текущим параметром scope.
    locals
    (необязательно)
    object

    Объект локальных переменных, полезный для переопределения значений в области видимости.

  • $apply([exp]);

    $apply() используется для выполнения выражения в Angular извне фреймворка Angular. (Например, из событий браузера DOM, setTimeout, XHR или сторонних библиотек). Поскольку мы вызываем фреймворк Angular, нам нужно выполнить правильный жизненный цикл области видимости обработки исключений, выполнения наблюдений.

    Жизненный цикл

    Псевдокод $apply()

    function $apply(expr) {
      try {
        return $eval(expr);
      } catch (e) {
        $exceptionHandler(e);
      } finally {
        $root.$digest();
      }
    }
    

    Метод $apply() области видимости проходит через следующие стадии:

    1. Выражение выражение выполняется с помощью метода $eval().
    2. Любые исключения из выполнения выражения передаются сервису $exceptionHandler.
    3. Слушатели наблюдений watch срабатывают сразу после выполнения выражения с помощью метода $digest().

    Параметры

    Параметр Тип Подробности
    exp
    (необязательно)
    stringfunction()

    Выражение Angular, которое нужно выполнить.

    • string: выполнить по правилам, определённым в выражении.
    • function(scope): выполнить функцию с текущим параметром scope.

    Возвращаемое значение

    *

    Результат выполнения выражения.

  • $applyAsync([exp]);

    Планирует вызов $apply в более позднее время. Фактическое время разницы варьируется в разных браузерах, но обычно составляет около ~10 миллисекунд.

    Это можно использовать для очереди нескольких выражений, которые должны быть оценены в одном цикле digest.

    Параметры

    Параметр Тип Подробности
    exp
    (необязательно)
    stringfunction()

    Выражение Angular, которое нужно выполнить.

    • string: выполнить по правилам, определённым в выражении.
    • function(scope): выполнить функцию с текущим параметром scope.
  • $on(name, listener);

    Прослушивает события заданного типа. См. $emit для обсуждения жизненного цикла событий.

    Формат функции-слушателя события: function(event, args...). Объект event передаваемый в слушатель имеет следующие атрибуты:

    • targetScope - {Scope}: область видимости, на которой событие было $emit-то или $broadcast-то.
    • currentScope - {Scope}: область видимости, которая в настоящее время обрабатывает событие. После того, как событие распространится через иерархию области видимости, этот атрибут устанавливается в null.
    • name - {string}: имя события.
    • stopPropagation - {function=}: вызов функции stopPropagation отменит дальнейшее распространение события (доступно только для событий, которые были $emit-ты).
    • preventDefault - {function}: вызов preventDefault устанавливает флаг defaultPrevented в true.
    • defaultPrevented - {boolean}: true, если preventDefault был вызван.

    Параметры

    Параметр Тип Подробности
    name string

    Имя события для прослушивания.

    listener function(event, ...args)

    Функция для вызова, когда событие испускается.

    Возвращаемое значение

    function()

    Возвращает функцию отмены регистрации этого слушателя.

  • $emit(name, args);

    Отправляет событие name вверх по иерархии области видимости, уведомляя зарегистрированных слушателей $rootScope.Scope.

    Жизненный цикл события начинается в области видимости, на которой был вызван $emit. Все слушатели слушатели, прослушивающие событие name в этой области видимости, уведомляются. После этого событие перемещается вверх к корневой области видимости и вызывает всех зарегистрированных слушателей по пути. Событие прекратит распространение, если один из слушателей его отменит.

    Любое исключение, испущенное от слушателей, будет передано сервису $exceptionHandler.

    Параметры

    Параметр Тип Подробности
    name string

    Имя события для отправки.

    args *

    Необязательные один или несколько аргументов, которые будут переданы слушателям событий.

    Возвращаемое значение

    Object

    Объект события (см. $rootScope.Scope).

  • $broadcast(name, args);

    Отправляет событие name вниз ко всем дочерним областям видимости (и их дочерним областям видимости), уведомляя зарегистрированных слушателей $rootScope.Scope.

    Жизненный цикл события начинается в области видимости, на которой был вызван $broadcast. Все слушатели слушатели, прослушивающие событие name в этой области видимости, уведомляются. После этого событие распространяется на все прямые и косвенные области видимости текущей области видимости и вызывает всех зарегистрированных слушателей по пути. Событие не может быть отменено.

    Любое исключение, испущенное от слушателей, будет передано сервису $exceptionHandler.

    Параметры

    Параметр Тип Подробности
    name string

    Имя события для трансляции.

    args *

    Необязательные один или несколько аргументов, которые будут переданы слушателям событий.

    Возвращаемое значение

    Object

    Объект события, см. $rootScope.Scope

События

  • $destroy

    Транслируется, когда область видимости и её дочерние элементы уничтожаются.

    Обратите внимание, что в AngularJS также есть событие jQuery $destroy, которое можно использовать для очистки привязок к DOM перед удалением элемента из DOM.

    Тип:

    вещание

    Целевой объект:

    уничтожаемая область видимости

Свойства

  • $id

    Уникальный идентификатор области видимости (монотонно возрастающий), полезный для отладки.

  • $parent

    Ссылка на родительскую область видимости.

  • $root

    Ссылка на корневую область видимости.

© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.3.20/docs/api/ng/type/$rootScope.Scope

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API