2

好的,这是交易。我有一个同时处理$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)。但我无法完全理解如何做到这一点......

4

0 回答 0