如果我想在服务中设置一些属性,我想设置的数据等于我从网络调用中获取的数据,我可以这样做:
//SERVICE//
thisService.property = data;
//SERVICE//
在我的控制器中,我可以这样做:
//CONTROLLER//
this.property = ThisService.property;
//CONTROLLER//
这样我就可以在HTML中绑定它并让它动态更新:
//VIEW//
{{property}}
//VIEW//
但是,正如您所知,这不起作用。 controller.property仍未定义,如下一行:
thisService.property = data;
将为thisService.property创建一个新引用,而在控制器中设置的旧引用将不会指向新数据。
所以,我要做的是将数据包装在另一个对象中,并执行以下操作:
//SERVICE//
thisService.property = {};
thisService.property.property = data;
//SERVICE//
//CONTROLLER//
this.property = ThisService.property;
//CONTROLLER
//VIEW//
{{property.property}}
//VIEW//
这是相当粗糙和丑陋的。是否有更好,更清洁的方法来实现这一目标?
答案 0 :(得分:2)
另一种方法是将服务对象暴露给视图sos,你不必为你的服务制作“疯狂”的东西:
this.service = ThisService;
并在视图中使用
{{service.property}}
答案 1 :(得分:2)
创建一个getter。
Object.defineProperty(this, 'property',
{ get: function() { return ThisService.property; }});
现在,控制器的property
将始终引用当前服务的property
。
如果服务的值只设置一次并且永远不会再次更改,那么我建议使用promise。这将更多地讲述正在发生的事情。