4

简单(看似)的问题 - 我正在尝试在我的 AngularJS 控制器中进行简单的完整性检查,以确保我的 $resource 实际上是这样实例化的。这是一个较大的应用程序,但例如:

.factory('AccountSearchService_XHR', ["$resource", function($resource) {
  var baseUrl = "http://localhost\\:8081/api/:version/accounts/:accountNumber";
  return $resource(baseUrl,
              {
                version: "@version",
                accountNumber: "@accountNumber"
              },
              {
                get: {method: 'GET', isArray: false}
              });
}]);

然后,在控制器中:

$scope.accountObj.currentAccount = AccountSearchService_XHR.get({
                                    version:        "v1",
                                    accountNumber:  "1234"
                                  },
                                  function(result) {... etc etc});

对我的 API 的调用工作正常,一切都像我期望的那样返回数据 - 但我想$scope.accountObj.currentAccount在尝试.get调用之前测试是否是资源(注意超级重要的大写字母“R”)。

当我$scope.accountObj.currentAccount在 chrome 调试器中检查对象时,它看起来像:

Resource {accountHolderName: Object, socialSecurityNumer: null, birthDate: "05/14/1965", maritalStatus: ...}

由于我的设置有些复杂,偶尔它会被作为普通对象(typeof返回"object")覆盖,但在调试器中检查它会确认它丢失了它的Resource状态。

那么 - 有没有人知道一种测试它是否是 $resource 的方法?几乎像typeof $scope.accountObj.currentAccount回报"Resource"?或者也许是一种更好的最佳实践方式来确保所有事情都以适当和可敬的方式连接起来?

我在搜索时看到的所有 SO 文章都围绕着实际的 Jasmine 测试。

提前致谢。

4

3 回答 3

0

@tengen,您需要注入要检查的类型,而不是 $resource。

所有资源都是“类”“资源”的实例,但这是在 $resource 服务的工厂方法内部定义的函数,因此您无法在 instanceof 运算符中使用它。

但是,您将使用您自己的自定义类型 AccountSearchService_XHR 来包装 $resource 创建,这就是您需要进行检查的内容。

您需要将 AccountSearchService_XHR 注入您的代码中,然后执行 myRef instanceof AccountSearchService_XHR,这将是 === true。

于 2014-08-18T14:26:17.047 回答
0

挖掘我的实习生刚刚提出的一个老问题。简单的解决方案是:

if ($scope.accountObj.currentAccount instanceof AccountSearchService_XHR)
   return 'This is a AccountSearchService_XHR Resource';
else
   return 'This is not a AccountSearchService_XHR Resource';

具有正确名称(Users作为 a $resource)和真实案例场景应该引导您编写如下内容:

if (!(this.user instanceof Users))
    this.user = new Users(this.user);

this.user.$update();  
于 2016-04-11T10:05:31.253 回答
-3

通过instanceof yourVariable === "Resource". 因为 Resource 是一个对象,所以该类型将始终作为 Object 返回,但是如果您检查它是 Resource“类”的一个实例,它应该可以正常工作。

于 2013-09-11T14:18:16.923 回答