`错误:将指令外部的值传递给父指令时,未定义输出

时间:2016-01-15 09:37:27

标签: events output angular

我有一个root-app组件,在模板中定义如下。

template: `
<dev-table (complete)="onSelect(developer)"></dev-table>
<dev-details [selectedDeveloper]="selectedDeveloper"></dev-details>
`
directives: [DevDetailsComponent, DevTableComponent],
providers: [DevValueService, provide(DevService, {useClass: DevService})]

是一个列表,在选择其中一个内部列表时,它应该发送列表(开发人员)的值,该值将作为选定的开发人员传递。 @Input定义正确并正确使用。但@output给出错误Error: Output is not defined需要什么定义或定义方法是什么。我错过了什么。

这是类定义:

@Component({
  selector: 'dev-table',
  template: `
    <ul class="dev">
      <li *ngFor="#developer of developers"
        [class.selected]="developer === selectedDeveloper;this.complete.next();"
        (click)="onSelect(developer)">
        <span class="spanbackground">{{developer.name}}</span> -  {{developer.skill}}
      </li>
    </ul>  
  `, 
  providers: [DevService]
})

export class DevTableComponent implements OnInit{
    public developers : Developer[];
    public selectedDeveloper : Developer;
    constructor(private _DevService: DevService) { }
    @Output() complete = new EventEmitter(); 
    public onSelect(developer: Developer) { this.selectedDeveloper = developer; }
    getDevelopers(){
      this._DevService.getDevelopers().then(developers => this.developers = developers)
    }
    ngOnInit(){
      this.getDevelopers();
    }
}

更新:最终的工作代码没有developer === selectedDeveloper;this.complete.next();而是将this.complete.next()放入onSelect函数。

2 个答案:

答案 0 :(得分:2)

如果要将值传递给父组件,可以使用自定义事件。此代码位于父组件的模板中:

@Component({
  (...)
  template: `
    <dev-table (complete)="someMethod($event.value)"></dev-table>
  `
})
export class ParentComponent {
  someMethod(value) {
    console.log('complete event - value = ' + value);
  }
}

要触发事件,您可以在子组件中执行类似的操作:

@Component({
  (...)
  template: `
    (...)
    <span (click)="triggerCompleteEvent()">Trigger complete event</span>
  `
})
export class DevTableComponent implements OnInit{
  @Output()
  complete:EventEmitter;

  constructor() {
    this.complete = new EventEmitter();
  }

  triggerCompleteEvent() {
    this.complete.emit(someValue);
  }
}

someValue对应于您希望事件包含的值以及事件订阅可以获得的值。

希望它可以帮到你, 亨利

答案 1 :(得分:2)

“@ output给出错误错误:未定义输出需要什么定义或定义方法是什么。我遗漏了一些东西。” :

import {Output} from "angular2/core";

您必须导入正在使用的任何类的定义。