Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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
Javascript 将操作传递给父级为';奥雷利亚的语境_Javascript_Ecmascript 6_Aurelia - Fatal编程技术网

Javascript 将操作传递给父级为';奥雷利亚的语境

Javascript 将操作传递给父级为';奥雷利亚的语境,javascript,ecmascript-6,aurelia,Javascript,Ecmascript 6,Aurelia,如何将动作从父视图/组件传递给子组件,并且仍然保持父视图/组件的上下文。下面的plunkr中显示的问题表明,如果在组件中执行操作,那么它是在组件的上下文中执行的,而不是传递操作的父级。基本上是典型的“that=this”问题 是的,您可以使用eventAggregator来执行此操作,但如果没有它,您将如何操作。是否必须将整个viewModel传递到组件中 //app.js 从“aurelia框架”导入{inject}; 从“/MyService”导入{MyService}; @注入(MySe

如何将动作从父视图/组件传递给子组件,并且仍然保持父视图/组件的上下文。下面的plunkr中显示的问题表明,如果在组件中执行操作,那么它是在组件的上下文中执行的,而不是传递操作的父级。基本上是典型的“that=this”问题

是的,您可以使用eventAggregator来执行此操作,但如果没有它,您将如何操作。是否必须将整个viewModel传递到组件中

//app.js
从“aurelia框架”导入{inject};
从“/MyService”导入{MyService};
@注入(MyService)
导出类应用程序{
构造函数(myService){
this.myService=myService;
this.message=“你好,世界!”;
}
doThing(){
log('do a thing');
this.myService.foo();
}
}
${message}

在app.html中做这件事 //my-component.js 从“aurelia框架”导入{bindable}; @可绑定('do') 导出类MyComponentCustomElement{ } 在我的组件中执行该操作 //my-service.js 导出类MyService{ foo(){ 警惕(“怜悯大富”); } }
如果您真的想这样做(可能有更干净的方法),您需要从子视图模型访问父视图模型,然后在子视图的单击绑定中调用该方法时,使用
.call()
在调用时更改
do()
方法的范围/上下文

因此,在子视图模型中,首先通过添加以下
bind
方法来访问父视图模型:

bind( bindingContext ) {
    // bindingContext is your parent view-model
    this.parent = bindingContext;
}
访问父视图模型后,可以更新子视图中的单击绑定,如下所示:

在我的组件中执行操作

这将从父视图模型的上下文调用
do()
方法


您可以使用
.call(作用域/上下文、列表、of、args等)
.apply(作用域/上下文、[args数组])
。有关
.call()
方法的更多信息,请查看您想尝试的一些糟糕的设计。如果您希望从组件外部使用服务,则应该将其注入而不是绑定。我不知道;我不知道aurelia绑定是如何工作的,但我认为您无法绑定函数。然而,即使你可以仍然是糟糕的设计。
bind( bindingContext ) {
    // bindingContext is your parent view-model
    this.parent = bindingContext;
}