好的,这是交易。我有一个同时处理$resource
和的服务$scope
,而且我对 Angular.JS 不够熟悉,无法相信自己能够正确组织它。该服务可以将资源与保持与后端的活动连接的 WebSocket 相关联。每当后端通知服务对给定资源的更改时,资源的属性就会更改以匹配,因此网页会使用新值实时自动更新。
这种 Websockety 的优点被称为“Frisch”,我目前组织它的方式是:
该类Frisch
是传统的并且完全独立于 Angular.JS 模块系统。它有一个angularize
设置 Angular.JS 资源绑定的方法:
var Frisch = function(url) {
... create a websocket ...
this.angularize = function(scope, record) {
this.websocketCallback = function(attributes) {
... update `record` with the new values ...
scope.$apply(); scope.$digest();
}
};
};
同时,我的控制器看起来像这样:
var MyController = function(MyModel, $scope) {
$scope.myModel = MyModel.get(... stuff ...);
new Frisch('/some/websocket/url').angularize($scope, $scope.myModel);
};
MyController.$inject = ['MyModel', '$scope'];
所以这是我的第一个 Angular.JS 项目,我觉得事情肯定可以组织得更好。具体来说,感觉$scope
和资源都必须传递给angularize
.
我猜想有更多 Angular-y 的方式来做这件事,比如服务或提供者之类的。也许某种方式将 Frisch-ness “混入”到模型工厂中(在这种情况下,MyModel
)。但我无法完全理解如何做到这一点......