AngularJS компонент в ES6

Я создал компонент AngularJS в ES6 следующим образом:

import template from 'template.html'

class ctrler {
  constructor ($scope, $cordovaDevice) {
    $scope.title = 'This is from component'
    this.$scope = $scope
    document.addEventListener('deviceready', this.onDeviceReady)
  }

  onDeviceReady() {
    console.log(this.$scope)
  }

  $onDestroy () {
    document.removeEventListener('deviceready', this.onDeviceReady)
    console.log('ctrler onDestroy');
  }
}

const cpnt = {
  template: template,
  controller: ctrler
}

export { cpnt }

Мой вопрос в том, что $scope и $cordovaDevice являются локальным параметром в constructor(){}, но я хочу, чтобы они стали глобальным параметром, поэтому я использую this.$scope = scope, это не работает.

Как мне это сделать?

2 ответа

Решение

Я уверен, что проблема в том, как вы передаете обратный вызов document.addEventListener(), Вы хотите связать this в контекст контроллера, добавив вызов bind(this) к методу, когда вы передаете его.

Попробуй это:

document.addEventListener('deviceready', this.onDeviceReady.bind(this));

Когда вы делаете это, this.$scope будет правильно ссылаться на ctrler"s this.$scope когда ваш обратный вызов выполняется.

На самом деле, $scope это не локальный параметр, это глобальный.

onDeviceReady() функция является функцией обратного вызова слушателя события, так this.$scope значит не ctrler.$scope, Это проблема.

Спасибо за ответ и прочитайте мой вопрос.

Хорошего дня.

Другие вопросы по тегам