如果我想将服务中的某些属性设置为等于我从网络调用返回的数据,我可以这样做:
//SERVICE//
thisService.property = data;
//SERVICE//
在我的 Controller 中我可以做:
//CONTROLLER//
this.property = ThisService.property;
//CONTROLLER//
这样我就可以在 HTML 中绑定(bind)它并让它动态更新:
//VIEW//
{{property}}
//VIEW//
但是,如您所知,这是行不通的。 controller.property 仍然未定义,因为这一行:
thisService.property = data;
将为 thisService.property 创建一个新的引用,而在 Controller 中设置的旧引用将不会指向新数据。
所以,我要做的是将数据包装在另一个对象中,然后执行如下操作:
//SERVICE//
thisService.property = {};
thisService.property.property = data;
//SERVICE//
//CONTROLLER//
this.property = ThisService.property;
//CONTROLLER
//VIEW//
{{property.property}}
//VIEW//
这相当粗糙和丑陋。有没有更好、更清洁的方法来实现这一目标?
最佳答案
创建一个 getter。
Object.defineProperty(this, 'property',
{ get: function() { return ThisService.property; }});
现在 Controller 的property
将始终引用当前服务的property
。
如果服务的值只设置一次并且永远不会再更改,那么我建议使用 promise。这会告诉我们更多关于正在发生的事情。
关于javascript - AngularJS:在保持绑定(bind)的同时设置属性:有更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32748257/