Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何从组件外部触发组件内部的函数?_Dart_Angular Dart - Fatal编程技术网

Dart 如何从组件外部触发组件内部的函数?

Dart 如何从组件外部触发组件内部的函数?,dart,angular-dart,Dart,Angular Dart,我有以下组件 @NgComponent(选择器:“foo”, 模板:“foo组件”) 类组件{ 无效剂量(); } 它的用法如下: //这是错误的 如何在NgComponent中实际执行函数?好问题 我想到的(可能不是你想要的): @NgController( 选择器:“[做点什么]”, 出版物:“ctrl” ) 类剂量{ 食物成分(u foo),; DoSomething(this.\u foo); 无效clickHandler(e){ _foo.doSomething(); } }

我有以下组件

@NgComponent(选择器:“foo”,
模板:“foo组件”)
类组件{
无效剂量();
}
它的用法如下:


//这是错误的
如何在NgComponent中实际执行函数?

好问题

我想到的(可能不是你想要的):

@NgController(
选择器:“[做点什么]”,
出版物:“ctrl”
)
类剂量{
食物成分(u foo),;
DoSomething(this.\u foo);
无效clickHandler(e){
_foo.doSomething();
}
}


您可以向组件添加事件侦听器。以下是一个例子:

html:


复合省道:

@NgComponent(选择器:“foo”,
模板:“foo组件”)
类组件{
FooComponent(元素元素){
elem.onClick.listen(doSomething);
}
无效剂量测定(MouseeEvent事件){
打印(“点击”);
}
}

这里有一个糟糕的解决方案,但如果没有其他解决方案,那么您可以使用此解决方案

编辑:我完全更新了这个解决方案。通过本例,可以定义
事件
组件识别的内容以及每个事件所附加的功能

html:

复合省道:

导入'dart:html';
导入“包:角度/角度.dart”;
@NGO组分(
选择器:“foo”,
模板:“foo”
)
类FooComp扩展了Ngatachaware{
@NgAttr('单击')
var点击;
@NgAttr(“双击”)
var双击;
元素;
var func;
FooComp(this.element){
}
附(){
附件(“点击”,点击);
附件(“双击”,双击);
}
void attachFunc(字符串侦听器,字符串名称){
开关(名称){
案例“test()”:
func=测试;
打破
案例“test2()”:
func=test2;
打破
}
开关(侦听器){
案例“点击”:
元素onClick.listen(func);
打破
“双击”案例:
元素。onDoubleClick.listen(func);
打破
}
}
测试(MouseEvent事件){
打印(“测试”);
}
test2(MouseEvent事件){
打印(“测试2”);
}
}
类MyAppModule扩展模块{
MyAppModule(){
类型(FooComp);
}
}
void main(){
ngBootstrap(模块:newmyappmodule());
}

这个问题一直困扰着我,我不得不对它进行更多的测试。在下面的示例中,组件具有多个函数和多个内置ng指令。您可以通过组件的属性定义哪些函数与哪些ng指令相关

html:

复合省道:

导入'dart:html';
导入“包:角度/角度.dart”;
@NGO组分(
选择器:“foo2”,
模板:“foo2”,
出版物:“cmp”
)
类Foo2Comp扩展了Ngatachaware{
@NgAttr('单击')
var-strClick;
@NgAttr(“双击”)
var-strDoubleclick;
点击按钮;
双击按钮;
Foo2Comp(){
}
附(){
ngClick=redirectFunc(strClick);
ngDoubleClick=redirectFunc(strDoubleclick);
}
重定向func(字符串funcName){
var ng;
开关(名称){
案例“测试”:
ng=试验;
打破
案例“测试2”:
ng=test2;
打破
违约:
ng=空;
打破
}
返回ng;
}
空的(){
打印(“空”);
}
测试(){
打印(“测试”);
}
test2(){
打印(“测试2”);
}
}
类MyAppModule扩展模块{
MyAppModule(){
类型(Foo2Comp);
}
}
void main(){
ngBootstrap(模块:newmyappmodule());
}

是的,这可以完成任务,但关键是我不想公开细节并添加额外的指令。但从技术上讲,我认为这可以完成工作。我尝试过,它也能工作,但我也不知道在同一元素上没有控制器的解决方案。他还可以将模板更改为
foo component
。从内部来说这很容易,但是从外部怎么做呢?我想这会起作用,但看起来很复杂。是的,这不是一个好的解决方案,但至少是一些问题。你提出的问题是个好问题,我认为这类功能可能有用。它将提供一个更可配置的组件,即一个具有更多用例的组件。如果我理解正确,问题是
ng click=“ctrl.doSomething()”
正试图取消对
ctrl
的引用,该引用未在当前作用域上定义,因为
ctrl
是在阴影作用域上定义的。@miskohever yes,这是正确的。