AngularJS:在保持绑定的同时设置属性:有更好的方法吗?

时间:2015-09-23 19:47:00

标签: javascript angularjs

如果我想在服务中设置一些属性,我想设置的数据等于我从网络调用中获取的数据,我可以这样做:

//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//

这是相当粗糙和丑陋的。是否有更好,更清洁的方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

另一种方法是将服务对象暴露给视图sos,你不必为你的服务制作“疯狂”的东西:

this.service = ThisService;

并在视图中使用

{{service.property}}

答案 1 :(得分:2)

创建一个getter。

Object.defineProperty(this, 'property',
                      { get: function() { return ThisService.property; }});

现在,控制器的property将始终引用当前服务的property

如果服务的值只设置一次并且永远不会再次更改,那么我建议使用promise。这将更多地讲述正在发生的事情。

Plunker