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

Events `错误:将指令外部的值传递给父指令时未定义输出,events,output,angular,Events,Output,Angular,我有一个根应用程序组件,在模板中定义如下 template: ` <dev-table (complete)="onSelect(developer)"></dev-table> <dev-details [selectedDeveloper]="selectedDeveloper"></dev-details> ` directives: [DevDetailsComponent, DevTableComponent], providers: [

我有一个根应用程序组件,在模板中定义如下

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

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

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

@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);
  }
}
@组件({
(...)
模板:`
`
})
导出类ParentComponent{
方法(值){
log('complete event-value='+value);
}
}
要触发事件,可以在子组件中执行类似操作:

@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);
  }
}
@组件({
(...)
模板:`
(...)
触发完成事件
`
})
导出类DevTableComponent实现OnInit{
@输出()
完成:事件发射器;
构造函数(){
this.complete=新的EventEmitter();
}
triggerCompleteEvent(){
this.complete.emit(someValue);
}
}
someValue
对应于您希望事件包含的值以及事件订阅可以获得的值

希望它能帮助你,
Thierry

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

@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);
  }
}
@组件({
(...)
模板:`
`
})
导出类ParentComponent{
方法(值){
log('complete event-value='+value);
}
}
要触发事件,可以在子组件中执行类似操作:

@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);
  }
}
@组件({
(...)
模板:`
(...)
触发完成事件
`
})
导出类DevTableComponent实现OnInit{
@输出()
完成:事件发射器;
构造函数(){
this.complete=新的EventEmitter();
}
triggerCompleteEvent(){
this.complete.emit(someValue);
}
}
someValue
对应于您希望事件包含的值以及事件订阅可以获得的值

希望它能帮助你, Thierry

“@output给出了一个错误:未定义输出所需的定义或定义方法。我缺少一些内容。”:

从“angular2/core”导入{Output}

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

“@output出现错误:未定义输出所需的定义或定义方法。我缺少一些内容。”:

从“angular2/core”导入{Output}


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

是否添加了此项<代码>从“angular2/core”导入{Output}谢谢。我这样做了,并且在[developer===selectedDeveloper;this.complete.next();]的第33列中得到了
绑定表达式不能包含链式表达式DevTableComponent@3:8
。从技术上讲,我所做的是将开发人员的价值传递给父组件。然后将其作为输入传递给.dev details,这样就可以正常工作了。但无法捕获带值发送的事件。您无法将那么多代码添加到模板中,必须将所有逻辑添加到返回布尔值的函数中,并按如下方式调用:
[class.selected]=“shouldSelect()”
Yea。您使用的任何类都必须导入它。OnInit、开发人员、开发服务…尝试选择($event)
?您添加了这个吗<代码>从“angular2/core”导入{Output}谢谢。我这样做了,并且在[developer===selectedDeveloper;this.complete.next();]的第33列中得到了
绑定表达式不能包含链式表达式DevTableComponent@3:8
。从技术上讲,我所做的是将开发人员的价值传递给父组件。然后将其作为输入传递给.dev details,这样就可以正常工作了。但无法捕获带值发送的事件。您无法将那么多代码添加到模板中,必须将所有逻辑添加到返回布尔值的函数中,并按如下方式调用:
[class.selected]=“shouldSelect()”
Yea。您使用的任何类都必须导入它。OnInit、Developer、DevService…尝试选择($event)
?该函数应该在父指令还是实际指令中完成$event.value是指令中我的列表中的某个值。捕获值并正确触发事件。但父母的定义是不明确的
    {{developer.name}-{{developer.skill}
并且类具有
onSelect(developer:developer){this.selectedDeveloper=developer;console.log(this.selectedDeveloper);this.complete.emit(this.selectedDeveloper);}
.In parent
现在安全地传递数据。谢谢。这个函数应该在parent指令还是实际指令中完成。$event.value是指令中我列表中的某个值。捕获的值和事件是正确触发的。但是父项未定义。
    {{{developer.name}-{{developer.skill}
,类具有
onSelect(developer:developer){this.selectedDeveloper=developer;console.log(this.selectedDeveloper});this.complete.emit(this.selectedDeveloper);}
.In parent
现在安全地传递数据。谢谢。所有工作正常,代码现在正常。我已在child指令中定义了事件。单击即可捕获数据(console.log工作正常)。我能够从指令内正确传递事件-没有生成错误。使用
this.complete.emit(someValue);
但我无法在父组件中捕获事件