Improve this Doc View Source

Factory that constructs Cache objects and gives access to them.

    var cache = $cacheFactory('cacheId');
    expect($cacheFactory.get('cacheId')).toBe(cache);
    expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();

    cache.put("key", "value");
    cache.put("another key", "another value");

    // We've specified no options on creation
    expect(cache.info()).toEqual({id: 'cacheId', size: 2});

## Usage

`$cacheFactory(cacheId, [options]);`

### Arguments

Param | Type | Details
--- | --- | ---
cacheId | string | Name or id of the newly created cache.

options
(optional)

object

Options object that specifies the cache behavior. Properties:

- `{number=}` `capacity` — turns the cache into LRU cache.

### Returns

object

Newly created cache object with the following set of methods:

- `{object}` `info()` — Returns id, size, and options of cache.
- `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns it.
- `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
- `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
- `{void}` `removeAll()` — Removes all cached values.
- `{void}` `destroy()` — Removes references to this cache from $cacheFactory.

## Methods

- ###

  `info();`

  Get information about all the caches that have been created

  #### Returns

  Object

  - key-value map of `cacheId` to the result of calling `cache#info`

- ###

  `get(cacheId);`

  Get access to a cache object by the `cacheId` used when it was created.

  #### Parameters

  Param | Type | Details
  --- | --- | ---
  cacheId | string | Name or id of a cache to access.

  #### Returns

  object | Cache object identified by the cacheId or undefined if no such cache.

## Example

Edit in Plunker

    <div ng-controller="CacheController">
      <input ng-model="newCacheKey" placeholder="Key">
      <input ng-model="newCacheValue" placeholder="Value">
      <button ng-click="put(newCacheKey, newCacheValue)">Cache</button>

      <p ng-if="keys.length">Cached Values</p>
      <div ng-repeat="key in keys">
        <span ng-bind="key"></span>
        <span>: </span>
        <b ng-bind="cache.get(key)"></b>
      </div>

      <p>Cache Info</p>
      <div ng-repeat="(key, value) in cache.info()">
        <span ng-bind="key"></span>
        <span>: </span>
        <b ng-bind="value"></b>
      </div>
    </div>

    angular.module('cacheExampleApp', []).
    controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
      $scope.keys = [];
      $scope.cache = $cacheFactory('cacheId');
      $scope.put = function(key, value) {
        if ($scope.cache.get(key) === undefined) {
          $scope.keys.push(key);
        }
        $scope.cache.put(key, value === undefined ? null : value);
      };
    }]);

    p {
      margin: 10px 0 3px;
    }