Angular2 + Angular1 + ES5语法组件订阅

时间:2016-02-08 01:40:03

标签: javascript angularjs

首先让我说我还在使用ES5,主要是因为我正在为Google Apps Scripts应用程序的前端编写这个,并且没有时间/耐心使TypeScript工作。

我目前正在使用此方法将Angular1应用升级到Angular2:

http://www.codelord.net/2016/01/07/adding-the-first-angular-2-service-to-your-angular-1-app/

我有一个overlayLoaderService服务,用于显示overlay div中的加载微调器,其中包含用于获取和设置加载状态的简单函数,以及用于显示div本身的overlayLoader组件。

服务

var overlayLoaderService = ng.core.
  Injectable().
  Class({
    constructor: function() {
      this.loading = false;
      this.stateChange = new ng.core.EventEmitter();
    },
    setState: function(state) {
      this.loading.value = state;
      this.stateChange.emit(state);
    },
    getState: function() {
      console.log(this.loading);
    }
  });

upgradeAdapter.addProvider(overlayLoaderService);
angular.module('Gojira').factory('overlayLoaderService', upgradeAdapter.downgradeNg2Provider(overlayLoaderService));

组件:

var OverlayLoaderComponent = ng.core
  .Component({
    selector: 'overlay-loader',
    template: '<div [hidden]="loading" id="overlay-loader"></div>',
    providers: [overlayLoaderService]
  }).Class({
    constructor: [overlayLoaderService, function(overlayLoaderService) {
      this.loading = !overlayLoaderService.loading.value;
      this._subscription = overlayLoaderService.stateChange.subscribe(function (value) {
        console.log(value);
        this.loading = !value;
      });
    }],
  });

angular.module('Gojira').directive('overlayLoader', upgradeAdapter.downgradeNg2Component(OverlayLoaderComponent));

我想要做的是实现当我在overlayLoaderService中调用setState()方法时更新其loading属性的组件。

订阅永远不会被调用,所以我想我在这里做了一些非常错误的事情。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

删除

providers: [overlayLoaderService]
来自OverlayLoaderComponent的

应该可以工作,因为提供程序已经添加到适配器中。否则,似乎角度1分量和角度2分量正在使用该服务的不同实例。