如何解开angularjs资源?

时间:2015-07-21 14:54:19

标签: javascript angularjs angular-resource

在angularjs中,$resource模块(第三类模块)很棒,可以获取承诺的数据(等等)。

例如,如果Article是返回$resource的工厂:

$scope.article = Article.query();

你得到了承诺。当承诺得到成功解决后,你会得到类似的东西:

> $scope.article;
[Resource, Resource, $promise: Object, $resolved: true]
0: Resource
1: Resource
$promise: Object
$resolved: true
length: 2
__proto__: Array[0]

太棒了!

我搜索的是,如果存在一种解开某些特殊任务的承诺的常用方法。

所以,像这样:

> $resource.unwrap($scope.article);
[Array,Array]
0: Object
1: Object
length: 2
__proto__: Array[0]

NB:

  

我没有搜索代码函数来实现unwrap方法,我已经根据我的需要做了。我正在寻找一个“本地人”。办法。但是,它并不存在,并且某人已经编码了一个强大的功能,使其成为正确的方法,为什么不呢!

1 个答案:

答案 0 :(得分:2)

您可能会错过some part of AngularJS documentation

  

您还可以通过返回对象上的$ promise属性访问原始$ http承诺

Article.query().$promise.then(function(articles) {
  $scope.articles = articles;
});

另一方面,AngularJS already provides method angular.toJson that removes all keys from object with $ as first character

/**
 * @ngdoc function
 * @name angular.toJson
 * @module ng
 * @kind function
 *
 * @description
 * Serializes input into a JSON-formatted string. Properties with leading $ characters will be
 * stripped since angular uses this notation internally.
 *
 * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
 * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.
 * @returns {string|undefined} JSON-ified string representing `obj`.
 */
function toJson(obj, pretty) {
  if (typeof obj === 'undefined') return undefined;
  return JSON.stringify(obj, toJsonReplacer, pretty ? '  ' : null);
}

toJsonReplacer看起来

function toJsonReplacer(key, value) {
  var val = value;

  if (typeof key === 'string' && key.charAt(0) === '$') {
    val = undefined;
  } else if (isWindow(value)) {
    val = '$WINDOW';
  } else if (value &&  document === value) {
    val = '$DOCUMENT';
  } else if (isScope(value)) {
    val = '$SCOPE';
  }

  return val;
}