angular2:提供的参数与呼叫目标的任何签名都不匹配,即使我拥有所有需要的参数

时间:2016-08-29 10:23:07

标签: html http post angular

push.component.ts

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);
    }
}

push.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)

1 个答案:

答案 0 :(得分:3)

-(void)saveEffectedAudioToFolder { AVAudioUnitTimePitch *pitchEffect = [AVAudioUnitTimePitch new]; NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; [recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; [recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; [recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; [recordSetting setValue:[NSNumber numberWithFloat:pitch] forKey:AVAudioTimePitchAlgorithmSpectral]; AVAudioFormat *commonFormat = [[AVAudioFormat alloc] initWithSettings:recordSetting]; pitchEffect.pitch =pitch; [self setupEQ]; NSError *error12; [_audioEngine startAndReturnError:&error12]; if (!error12) { NSLog(@"Engine = %@",_audioEngine); [audioPlayerNode scheduleFile:_audioFile atTime:nil completionHandler:nil]; NSError *error; _outputFile = [[AVAudioFile alloc] initForWriting:[self testFilePathURL] settings:commonFormat.settings error:&error]; NSLog(@"outputfile = %@",_outputFile); if (error) { NSLog(@"outputFile error = %@",error); } else { [SVProgressHUD dismiss]; [audioPlayerNode installTapOnBus:0 bufferSize:8192 format:_audioFile.processingFormat block:^(AVAudioPCMBuffer *buffer, AVAudioTime *when) { NSLog(@"Buffer Size = %@",buffer); NSLog(@"when = %lld",when.sampleTime); NSLog(@"outputfile length = %lli",_outputFile.length); NSLog(@"input file length = %lld",_audioFile.length); if (_outputFile.length<=_audioFile.length) { NSError *error; [_outputFile writeFromBuffer:buffer error:&error]; if (error) { NSLog(@"writebuffererror =%@",error); } } else { NSError *error2; [audioPlayerNode removeTapOnBus:0]; // player2 = [[AVAudioPlayer alloc] initWithContentsOfURL:[self testFilePathURL] error:&error2]; //player2.delegate = self; NSLog(@"Pathththt = %@",[self testFilePathURL]); NSLog(@"error = %@",error2); [audioPlayerNode scheduleFile:_outputFile atTime:nil completionHandler:nil]; [audioPlayerNode play]; // [self toMp3]; } }]; } } else { NSLog(@"error12 =%@",error12); } } - (void)setupEQ { NSLog(@"setupEQ"); _unitEq = [[AVAudioUnitEQ alloc] initWithNumberOfBands:12]; _unitEq.globalGain = 3.0; AVAudioUnitEQFilterParameters *filterParameters; filterParameters = _unitEq.bands[0]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain = 20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[1]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain = 20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[2]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain = 20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[3]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain = 20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[4]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain = 20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[5]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain = 20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[6]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain = 20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[7]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain =20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[8]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain = 20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[9]; filterParameters.filterType = AVAudioUnitEQFilterTypeParametric; filterParameters.frequency = pitch; filterParameters.bandwidth = 1.0; filterParameters.gain =20.0f; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[10]; filterParameters.filterType = AVAudioUnitEQFilterTypeLowPass; filterParameters.frequency = pitch; filterParameters.bypass = FALSE; filterParameters = _unitEq.bands[11]; filterParameters.filterType = AVAudioUnitEQFilterTypeHighPass; filterParameters.frequency = pitch; filterParameters.bypass = FALSE; [_audioEngine attachNode:_unitEq]; 需要PushComponent个实例作为参数

PushService

但你没有提供一个

constructor(private pushService:PushService) {

如果您使用new PushComponent(/* parameter value missing */); 自己创建实例,则不会涉及Angulars DI,也不会传递任何依赖项。 只有当Angulars DI本身创建new Xxx()时才会解析并传递依赖关系。

PushComponent

不要期望注入一个组件。你通过这种方式获得的是组件类的一个实例(没有运行任何更改检测,也没有调用生命周期钩子,...)

如果您需要组件,则需要使用import {beforeEachProviders, it, describe, inject} from '@angular/core/testing'; describe('my code', () => { beforeEachProviders(() => [PushService, PushComponent]); it('does stuff', inject([PushComponent], (pushComponent) => { // actual test }); }); 。另请参阅https://github.com/angular/angular/blob/master/CHANGELOG.md