我有一个带有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。