Spec-Zone.ru › Angular.js 1.4

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

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

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

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

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

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, который будет родителем вновь созданного объекта. По умолчанию это this объект, если не указано иначе. Это используется при создании переносимого объекта, чтобы правильно разместить его в иерархии объектов, сохраняя правильное прототипическое наследование.

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

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

    Object

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

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

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

    • watchExpression вызывается при каждом вызове $digest() и должен возвращать значение, за которым будет следить. (watchExpression не должен изменять своё значение при выполнении несколько раз с одним и тем же входом, потому что он может быть выполнен несколько раз $digest(). То есть, watchExpression должен быть идемпотентным.
    • 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 также есть событие jQuery $destroy, которое можно использовать для очистки привязок к 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).
    • будет выполнена как минимум одна $цикл обработки после 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. Прослушиватели наблюдения срабатывают сразу после выполнения выражения с использованием метода $digest().

    Параметры

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

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

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

    Возвращает

    *

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

  • $applyAsync([exp]);

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

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

    Параметры

    Параметр Тип Подробности
    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 также есть событие $destroy jQuery, которое можно использовать для очистки связей с DOM перед удалением элемента из DOM.

    Тип:

    broadcast

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

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

Свойства

  • $id

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

  • $parent

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

  • $root

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

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

Spec-Zone.ru

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