繁体   English   中英

Angular2自定义npm软件包

[英]Angular2 custom npm package

我想为在多个应用程序中使用的身份验证服务编写一个npm模块。 我看了看其他软件包,但找不到很大的不同。

我的模块部分::

我的Package.json:

{
 "name": "myApi-services",
 "version": "1.0.0-11",
 "main": "index.js",    //referring to the compiled js file from index.ts
 "dependencies": {
 "@angular/common": "2.1.0",
 "@angular/core": "^2.1.0",
 "@angular/http": "^2.1.0",
 "@angular/platform-browser": "^2.1.0",
 "angular2-jwt": "^0.1.25",
 "rxjs": "5.0.0-beta.12",
 "zone.js": "^0.6.21"
 }
}

我的Index.ts

export { MyAuthService} from "./authenticate"

我的认证课程

import { Http, Headers } from '@angular/http';
import { Config } from './config'

export class Authenticate {

constructor(private http:Http, private authUrl:string) {
    this.authUrl = Config.authUrl;
}

public login(username:string, password:string): void {
    let headers = new Headers();
    headers.append('Authorization', 'Basic ' + btoa(username + ':' + password));
    headers.append('Accept', 'application/json');
    this.http.post(this.authUrl, {}, { headers: headers })
        .subscribe(
            response => {
                this.storeToken(response.json().token);
            },
            err => console.log(err),
            () => console.log('Request Complete')
        );
}

private storeToken(token: string):void{
    localStorage.setItem('apiservices_token', token);
    console.log(localStorage.getItem('apiservices_token'))
}
}

我的导入部分::

的package.json

"depenencies":{
  "MyApi-services": "file:/// .... "
}

导入有效,模块导入到node_modules文件夹

app.module.ts

import { Authenticate } from 'myApi-services'
@NgModule({
  imports:[ Authenticate ]
})

app.component.ts

import { Authenticate } from 'myApi-services'

...

constructor(private auth: Authenticate){}

private login():void{
   auth.login('me', '12345');
}

....

浏览器抛出的错误之一:

Uncaught Error: Unexpected value 'Authenticate' declared by the module 'AppModule'

此错误是由模块错误引起的。 将其声明为提供程序也不起作用。 错误是一样的。

有谁知道如何为angular2创建自己的自定义插件以及如何正确注入它们?

问题是我模块中的构造函数参数:

constructor(
     private http:Http, 
     private authUrl:string) {
   this.authUrl = Config.authUrl;

}

当我直接在类中声明它们时,该模块起作用了:

export class Authenticate {
      http: Http;
      authUrl:strin;

      constructor(){
          console.log("constructor without params");
      }
 }

angular2 npm模块似乎不喜欢构造函数中的params。

Furter(如Michał所说):模块必须放在提供者处,而不是导入处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM