用远程方法替换的模型实例导致Angular调用Loopback

时间:2015-08-05 03:53:02

标签: angularjs loopbackjs

我有一个带有Angular前端的Loopback API,并且在尝试调用非静态远程方法时看到了一些奇怪的行为。

我把它归结为这个例子。打这样的电话时:

$scope.myInstance = MyModel.findOne({}, function success(value){
  $scope.greeting = value.$prototype$hello({}, function success(){});
});

我发现$ scope.myInstance最终包含对$ prototype $ hello的调用结果,$ scope.greeting为空。 MyModel使用如下远程调用定义:

module.exports = function(MyModel) {

   MyModel.prototype.hello = function(cb) {
     cb(null,"Hello: " + this.name);
   }

   MyModel.remoteMethod(
     'hello',
     {
       isStatic: false,
       http: { verb: 'get' },
       returns: {arg: 'message', type: 'string'}
     }
   );

};

所以,如果我在我的模板中有这个:

Greeting = {{ greeting }}, Instance = {{ myInstance }}

我明白了:

  

Greeting = {},Instance = {“message”:“Hello:Test”,“$ promise”:{},“$ resolved”:true}

将问候结果清楚地代替模型实例。我希望在Instance变量中看到模型实例:

  

Greeting = {},Instance = Instance = {“name”:“Test”,“id”:1,“$ promise”:{},“$ resolved”:true}

在装载过程中,模型会短暂闪现。

我可以通过检索模型的其他一次性实例来解决这个问题,但我希望有人知道为什么会发生这种情况,以及是否有更清洁的解决方案。

更新2015年12月12日:我创建了一个Plunker来演示此问题here,但这只包含客户端JS。对于完整的环回项目,我已将代码添加到GitHub repo

有趣的是,Safari下的行为略有不同,它根本不呈现实例:

  

问候语= {},实例=

最初描述的行为见于Chrome。

0 个答案:

没有答案