2016-08-29 10 views
1

push.component.tsangular2:指定されたパラメータは、私は必要なすべてのparamsに

import { Component, OnInit } from '@angular/core'; 

import {PushResult}  from './dto/pushResult'; 
import {PushRequest}  from './dto/pushRequest'; 
import {PushService}  from './push.service'; 

@Component({ 
    // selector: 'push-comp', 
    template: 
     // `<form (submit)="submitForm()"> 
     // <input [(ngModel)]="element.name"/> 
     // 
     // <button type="submit">Submit the form</button> 
     // </form> 
     // <br> 
    `<button (click)="getHeroes()"> get </button> <button (click)="saveHeroes()"> push </button>`, 
    // templateUrl: 'app/html/heroes.component.html', 
    providers: [PushService] 
}) 
export class PushComponent implements OnInit { 
    pushResult:PushResult; 
    // selectedHero:Hero; 
    // addingHero = false; 
    error:any; 
    element:any; 

    constructor(private pushService:PushService) { 
     console.info("in PushComponent constructor()"); 

    } 

    getHeroes() { 
     this.pushService 
      .doSomeGet(); 
      // .then(pushResult => this.pushResult = pushResult) 
      // .catch(error => this.error = error); 
    } 


    saveHeroes() { 
     var pushRequest: PushRequest = new PushRequest(); 
     // this.pushService.doSelectMessagesAttributesUrl2(pushRequest); 
     this.pushService.doFeatureCreateNewMessageUrl(pushRequest); 
     this.pushService.doFeatureSelectPushMessages(this.element); 
     // .then(pushResult => this.pushResult = pushResult) 
     // .catch(error => this.error = error); 
    } 





    ngOnInit() { 
     console.info("in PushComponent ngOnInit()"); 
     // this.getHeroes(); 
     // this.saveHeroes(); 
    } 

} 

push.service.ts

import { Injectable }    from '@angular/core'; 
import {Http, Response, Headers} from '@angular/http'; 

import 'rxjs/add/operator/toPromise'; 
import 'rxjs/Rx'; 
import { PushResult } from './dto/pushResult'; 
import {PushRequest} from './dto/pushRequest'; 
import {StringUtilsService} from "../shared/stringUtils.service"; 


@Injectable() 
export class PushService { 
    //private pushUrl = 'http://www.ynet.com'; // URL to web api 
    // private getUrl = '/app/eladb.json'; // URL to web api 
    private getUrl = '/SupporTool/ShowConfig?id=4'; // URL to web api 
    private selectMessagesAttributesUrl = '/SupporTool/Push/SelectMessagesAttributes'; // URL to web api 
    private postMultiMap = '/SupporTool/Push/FeatureCreateNewMessage'; // URL to web api 
    private postBoolean = '/SupporTool/Push/FeatureSelectPushMessages'; // URL to web api 

    private stringUtilsService : StringUtilsService; 

    constructor(private http: Http) { 
     this.stringUtilsService = new StringUtilsService(); 
    } 

    doSomeGet() { 
     console.info("sending get request"); 


     let headers = new Headers({ 
      'Content-Type': 'application/xml'}); 


     this.http.get(this.getUrl, {headers: headers}) 
      .map(res => res.text()) 
      .subscribe(
       data => { console.info("next: "+data) }, 
       err => console.error(err) 
      ); 
    } 

    doSelectMessagesAttributesUrl2(pushRequest : PushRequest) { 
     console.info("sending post request"); 

     let headers = new Headers({ 
      'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'}); 

     return this.http 
      .post(this.selectMessagesAttributesUrl, "", {headers: headers}) 
      .map(res => res.json()) 
      .subscribe(
       data => { console.info("next: "); console.info(data) }, 
       err => console.error(err) 
      ); 
    } 


    doFeatureCreateNewMessageUrl(pushRequest : PushRequest) { 
     console.info("sending post request"); 

     let headers = new Headers({ 
      'Content-Type': 'application/x-www-form-urlencoded'}); 

     var isLimit = true; 

     return this.http 
      .post(this.postBoolean, "#limit="+isLimit, {headers: headers}) 
      .map(res => res.json()) 
      .subscribe(
       data => { console.info("next: "); console.info(data) }, 
       err => console.error(err) 
      ); 
    } 

    doFeatureSelectPushMessages(element : any) { 
     console.info("sending post request"); 

     let dict = {"limit":"true", "name":"foo"} 


     let headers = new Headers({ 
      'Content-Type': 'application/x-www-form-urlencoded'}); 


     var params = {}; 
     params['push_input_internal_id'] = "1"; 
     params['b'] = "2"; 

     var formParamString = this.stringUtilsService.mapToFormParamsString(params); 

     return this.http 
      .post(this.postMultiMap, formParamString , {headers: headers}) 
      .map(res => res.json()) 
      .subscribe(
       data => { console.info("next: "); console.info(data) }, 
       err => console.error(err) 
      ); 
    } 

    private handleError(error: any) { 
     console.error('An error occurred', error); 
     // return Promise.reject(error.message || error); 
    } 
} 

プッシュを持っているにもかかわらず、呼び出し対象のいずれかの署名と一致しません。 component.spec.ts

import { By }   from '@angular/platform-browser'; 
import { DebugElement } from '@angular/core'; 
import { addProviders, async, inject } from '@angular/core/testing'; 
import { PushComponent } from './push.component'; 

describe('Component: Push',() => { 
    it('should create an instance',() => { 
    let component = new PushComponent(); 
    expect(component).toBeTruthy(); 
    }); 
}); 

app.routing.ts

import { ModuleWithProviders } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 

import { PushComponent }  from './push/push.component'; 


const appRoutes: Routes = [ 
    { path: '', redirectTo: '/push', pathMatch: 'full' }, 
    { path: 'push', component: PushComponent} 
]; 

export const appRoutingProviders: any[] = []; 

export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes); 

私はこれをpostと読んでいましたが、私のために働いていました。だから、私は何が欠けているのか理解できない。

npm start

ビルドエラー

The Broccoli Plugin: [BroccoliTypeScriptCompiler] failed with: 
Error: Typescript found the following errors: 
    /Users/eladb/WorkspaceQa/SupporTool/src/main/webapp/html/ng2/tmp/broccoli_type_script_compiler-input_base_path-2GTEvnc7.tmp/0/src/app/push/push.component.spec.ts (10, 21): Supplied parameters do not match any signature of call target. 
    at BroccoliTypeScriptCompiler._doIncrementalBuild (/Users/eladb/WorkspaceQa/SupporTool/src/main/webapp/html/ng2/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:120:19) 
    at BroccoliTypeScriptCompiler.build (/Users/eladb/WorkspaceQa/SupporTool/src/main/webapp/html/ng2/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:43:10) 
    at /Users/eladb/WorkspaceQa/SupporTool/src/main/webapp/html/ng2/node_modules/angular-cli/node_modules/broccoli-caching-writer/index.js:152:21 
    at lib$rsvp$$internal$$tryCatch (/Users/eladb/WorkspaceQa/SupporTool/src/main/webapp/html/ng2/node_modules/angular-cli/node_modules/rsvp/dist/rsvp.js:1036:16) 
    at lib$rsvp$$internal$$invokeCallback (/Users/eladb/WorkspaceQa/SupporTool/src/main/webapp/html/ng2/node_modules/angular-cli/node_modules/rsvp/dist/rsvp.js:1048:17) 
    at lib$rsvp$$internal$$publish (/Users/eladb/WorkspaceQa/SupporTool/src/main/webapp/html/ng2/node_modules/angular-cli/node_modules/rsvp/dist/rsvp.js:1019:11) 
    at lib$rsvp$asap$$flush (/Users/eladb/WorkspaceQa/SupporTool/src/main/webapp/html/ng2/node_modules/angular-cli/node_modules/rsvp/dist/rsvp.js:1198:9) 
    at _combinedTickCallback (internal/process/next_tick.js:67:7) 
    at process._tickCallback (internal/process/next_tick.js:98:9) 
+0

どのコードは "push.component.spec.ts(10、21)"にありますか? –

+0

が質問に追加されました。この行は 'let component = new PushComponent();' –

答えて

3

PushComponentパラメータ

constructor(private pushService:PushService) { 

としてPushServiceインスタンスを見込んでいますが、1

new PushComponent(/* parameter value missing */); 
を提供していません後、私はこのエラーを取得します

new Xxx()を使用してインスタンスを作成する場合、角度DIは関与せず、依存関係は渡されません。 Angulars DI自体がPushComponentを作成した場合にのみ、依存関係を解決して渡します。

コンポーネントを注入することを期待しないでください。このようにすると、コンポーネントのクラスのインスタンスがあります(変更の検出やライフサイクルフックの呼び出しはありません...)

コンポーネントが必要な場合は、TestBedを使用する必要があります。関連項目https://github.com/angular/angular/blob/master/CHANGELOG.md

+0

です。テストファイルでDIを使用するにはどうすればいいですか? –

+0

答えを更新しました。私はこれが最新のバージョンであることを100%確信していません。テストはすべてのリリースで変更されました(うまくいけば前回)。 –

関連する問題