TypeScript - доступ к переменной во внутреннем объекте - PullRequest
0 голосов
/ 31 мая 2018

У меня есть класс сценария типа, который принимает URL (строку) в качестве параметра в конструкторе.Внутри класса у меня есть другой класс, который является моделью представления для devextreme datagrid.Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как получить доступ к свойству url во внутреннем объекте (GridViewModel), в котором есть функция, являющаяся его частью.

export class MyClassOne {
    private myUrl: string;

    constructor(url: string) {
        this.myUrl = url;
    }

    public GridViewModel = {
        dataGridOptions: {
            dataSource : { store: someSource}
                   ...
            aFunction:  function(e){

                // this.myUrl is undefined
                var postUrl =  this.myUrl;               
            }             
        }
    }
}  
var myClassOne = new MyClassOne("https://www.google.com"); 

Мой вопрос: как мне получить доступ к this.myUrl во внутренней функции объекта?Пожалуйста, помогите

Спасибо,

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Итак, в основном мне нужно было заменить функцию (e) на e =>, чтобы сохранить область действия 'this'

export class MyClassOne {
    private myUrl: string;

    constructor(url: string) {
        this.myUrl = url;
    }

    public GridViewModel = {
        dataGridOptions: {
            dataSource : { store: someSource}
                   ...
            aFunction:  e => {

                // this.myUrl is undefined
                var postUrl =  this.myUrl;               
            }             
        }
    }
}

var myClassOne = new MyClassOne("https://www.google.com"); 
0 голосов
/ 31 мая 2018

область действия 'this' изменилась внутри функции. Либо вы можете создать функцию стрелки , которая сохраняет область действия, либо использовать self-переменную дляудерживайте внешнюю область.

например, функции с оператором стрелки.Ваша функция может быть заменена на

e => {
var postUrl =  this.myUrl;              
}
...