将Angular 1.x站点转换为Angular 2.6

时间:2018-06-21 20:46:22

标签: angular typescript

我正在转换一个旧的有角度的1.x站点,并且遇到了我遇到的一部分代码。

旧代码:

var loaded = vm.cartMap.on('load', function() {
    loaded.remove();
    setupExtentLayer();
});

function setupExtentLayer() {
    esriLoader.require(['esri/layers/GraphicsLayer'], function (GraphicsLayer) {
        vm.extentLayer = new GraphicsLayer();
        vm.cartMap.addLayer(vm.extentLayer);
        if (vm.cartItems.length > 0) {
            _updateCartStatus();
        }
    });
}

新代码:

const loaded = this.cartMap.on('load', function() {
    loaded.remove();
    this.setupExtentLayer();
 });

setupExtentLayer() {
  loadModules(['esri/layers/GraphicsLayer']).then(([GraphicLayer]) => {
    this.extentLayer = new GraphicLayer();
    this.cartMap.addLayer(this.extentLayer);
    if (this.cartItems.length > 0) {
        this._updateCartStatus();
    }
  });
}

我的问题是有角度的2.6代码无法识别setupExtentLayer()方法。

我在这里想念什么?

2 个答案:

答案 0 :(得分:2)

您可能需要将setupExtentLayer函数绑定到父类构造函数中。

类似-

  

this.setupExtentLayer = this.setupExtentLayer.bind(this);

答案 1 :(得分:1)

问题出现在JS中,上下文为this,而不是Angular 2中。

this.cartMap.on('load', function() {
    loaded.remove();
    this.setupExtentLayer(); // js this
 }.bind(this)); // bind this to function