Я использую angular2 Beta. и получить ошибку при использовании аннотации @Inject для DI моей одной службы другому, не в состоянии выяснить, где я ошибаюсь. Все похоже на Angular2 documentation.angular2 вводят сервис другому - ошибка при использовании @Inject
Я использую облачные сервисы данных - CloudDB - для потребностей приложения. CloudDB предоставляет мне клиентскую библиотеку на основе javascript, которую я могу включить в мое приложение js, и использовать для выполнения операций CRUD в моей базе данных cloudDB или вызвать другой пользовательский API, который я сохранил в своей учетной записи CloudDB, например API UserAuth (API для аутентификации учетных данных пользователя) , Прежде чем использовать API-интерфейс cloudDB js client lib, мне нужно указать URL-адрес моей учетной записи cloudDB и authKey, вызвав метод getClient объекта CloudDB js.
В моем приложении angualar2 я создал класс для инъекций - CloudDBProvider - он сохранит мой URL-адрес учетной записи CloudDB и authKey и вызовет CloudDB.getClient, чтобы установить клиентский объект js-провайдера для моей учетной записи CloudDB.
import {Injectable} from 'angular2/angular2';
///<reference path="../typeDefs/CloudDB.d.ts" /> //typedef of CloudDB js library
@Injectable()
export class CloudDBProvider {
private cloudDBClient: CloudDB.JSClient;
public get cloudDBClient(): CloudDB.JSClient {
return this.cloudDBClient;
}
constructor() {
this.cloudDBClient = new CloudDB.getClient(
"https://myaccount.CloudDB.com/",
"AcfdsfmyDdCMHeadfsdsdfHdsf68" // account authKey
);
}
}
Теперь я хочу, чтобы создать службу UserUtils в этом angular2 приложение, к которому я хочу привнести выше класс, чтобы получить cloudDBClient объект. Я закодирован UserUtils класс обслуживания, как показано ниже, так как узнал из вашего учебника
import {Injectable, Inject} from 'angular2/angular2';
import {CloudDBProvider} from './CloudDBProvider';
@Injectable()
export class UserUtils {
private _userDetails: Object = {};
private _cloudDBProvider: CloudDBProvider;
private _cloudDBClient: Microsoft.WindowsAzure.MobileServiceClient;;
constructor(@Inject(CloudDBProvider) cloudDBPrvdr: CloudDBProvider) {
this._cloudDBProvider = cloudDBPrvdr;
this._cloudDBClient = this._cloudDBProvider.cloudDBClient; //the public getter property in the class CloudDBProvider
}
public authenicateUser(p_strUserName: string, p_strUserPassword: string) {
var p: Promise<any> = new Promise(
(resolve: (result: any) => void, reject: (err: any) => void) =>
this._cloudDBClient.userlogin(p_strUserName, p_strUserPassword).done(//using API 'userlogin' of cloudDB to authenticate user against my cloudDB's users table.
(loginResult) => {
alert("from Userutils - You are now logged in as: " + loginResult.user.basicProfile.firstName);
resolve(loginResult);
},
(loginErr: any) => {
alert("Error: " + loginErr.request.responseText);
reject(loginErr);
}
)
);
return p;
}
}
тогда я пытаюсь использовать UserUtils в моем LoginPage компонента, как показано ниже:
import {Component} from 'angular2/core';
import {WelcomePage} from "../views/welcome/welcome";
import {UserUtils} from "../services/UserUtils";
@Component({
templateUrl: 'app/login/login.html',
providers: [UserUtils]
})
export class LoginPage {
private _userUtils: UserUtils;
constructor(userUtils: UserUtils) {
this._userUtils = userUtils;
}
public loginButtonClicked(event, userName, password) { //called when Login Button is clicked by user
//...
//... to-do field value verification
//...
this._userUtils.authenicateUser(userName, password).then(
(result) => {
//navigate to WelcomePage
},
(err) => { alert(err); }
);
}
}
компонент LoginPage Безразлично Не работайте, когда я использую UserUtils. В консоли браузера выдается ошибка - нет провайдера для CloudDBProvider! (LoginPage -> UserUtils -> CloudDBProvider)
Обратите внимание, что если я переведу метод «authenicateUser» из UserUtils в CloudDBProvider напрямую и с помощью CloudDBProvider в компоненте LoginPage для аутентификации пользователей, то все будет работать нормально, пользователь получает аутентификацию и навигацию приветствовать страницу после входа в систему. Кроме того, никакая ошибка не возникает, и приложение работает, если я удаляю cloudDBPrvdr из облака UserUtils из облачного конструктора UserUtils, но я не могу использовать CloudDBProvider, а затем в UserUtils, но точка - это приложение не вызывает никакой ошибки, а это значит, что что-то не так с @Inject.
любая подсказка, где я иду не так?
Благодаря Прадип. Я использую Ionic framework, фрагмент кода, который у меня есть в моем вопросе, - это объяснить, что я делаю на высоком уровне. Фактический код имеет определенный Ionic-код. Ионный обеспечивает инъекции и инъекции из «угловой2/угловой2», поэтому в импорте ошибок нет. Что касается инъекции службы с использованием общедоступного идентификатора, я тоже пробовал это, но получал ту же ошибку. – kkap
ohh okay Я не читал, прежде чем вы используете ионную структуру. Прости –