#angular #ionic-framework #ionic2
#angular #ionic-framework #ionic2
Вопрос:
Это мой класс.
import { Injectable } from '@angular/core';
import { Events } from 'ionic-angular';
@Injectable()
export class Socket {
public isConnected: boolean = false;
constructor(public events: Events) {
console.log("Socket.js constructed.");
}
}
Я использую его как:
import { Socket } from '../App/Socket/Socket';
@Component({
templateUrl: 'layout.html'
})
export class ConferenceApp {
constructor() {
console.log(Socket.isConnected);
}
}
Однако я получаю Property 'isConnected' does not exist on type 'typeof Socket'
сообщение об ошибке при запуске ionic serve.
Typescript не поддерживает значения, которые должны быть прикреплены к области видимости класса?
Спасибо.
Комментарии:
1. поделиться кодом
../App/Socket/Socket
? есть../App/Socket/Socket
лиservice
?
Ответ №1:
То, как вы его используете здесь
console.log(Socket.isConnected);
isConnected
должно быть статическим свойством вместо созданного вами свойства экземпляра.
Я предполагаю, что вы все равно хотите использовать его по-другому, потому что вы добавили @Injectable()
.
Вам нужно где-то предоставить сервис, чтобы иметь возможность его вводить. Я не знаю, было ли NgModule
оно уже установлено в ionic, но вы также можете предоставить его в компоненте, если его не нужно использовать совместно с другими компонентами.
Чтобы внедрить его, добавьте его в список параметров конструктора
import { Socket } from '../App/Socket/Socket';
@Component({
templateUrl: 'layout.html',
providers: [Socket]
})
export class ConferenceApp {
constructor(socket:Socket) {
console.log(socket.isConnected);
}
}
затем получите к нему доступ, используя параметр конструктора вместо имени класса.
Ответ №2:
Вам нужно создать экземпляр Socket
by new Socket()
. Тогда вы сможете получить доступ к этому свойству. Вы также можете ввести его с помощью внедрения зависимостей.
Ответ №3:
Ваша проблема в том, что вы используете Socket как static
класс, а не используете систему DI angular2.
Это будет работать:
import { Socket } from '../App/Socket/Socket';
@Component({
templateUrl: 'layout.html'
})
export class ConferenceApp {
constructor(socket:Socket) {
console.log(socket.isConnected);
}
}
Поскольку он использует систему DI angular2, вы получите экземпляр Socket, а не фактический Socket
класс.