Как передать действие из родительского представления/компонента в дочерний компонент и по-прежнему поддерживать контекст родителя. Проблема, показанная ниже в plunkr, показывает, что если действие выполняется в компоненте, оно находится в контексте компонента, а не родителя, который прошел действие. В основном типичная проблема «this = this».Передача действия компоненту с контекстом родителя в Aurelia
Да, вы можете использовать eventAggregator для этого, но как бы вы без него. Вам нужно передать весь viewModel в компонент?
http://plnkr.co/edit/n1xPUdR5nhXwwIivawBj?p=preview
// app.js
import { inject } from 'aurelia-framework';
import { MyService } from './my-service';
@inject(MyService)
export class App {
constructor(myService) {
this.myService = myService;
this.message = "Hello World!";
}
doThing() {
console.log('do a thing');
this.myService.foo();
}
}
<!--app.html-->
<template>
<require from="./my-component"></require>
<p>${message}</p>
<button click.delegate="doThing()">Do the thing - in app.html</button>
<my-component do.bind="doThing"></my-component>
</template>
// my-component.js
import { bindable } from 'aurelia-framework';
@bindable('do')
export class MyComponentCustomElement {
}
<!-- my-component.html -->
<template>
<button click.delegate="do()">Do the thing - in my-component</button>
</template>
// my-service.js
export class MyService {
foo() {
alert("pity da foo");
}
}
Это плохой дизайн, который вы хотите попробовать. Если вы хотите использовать сервис извне компонента, его следует вводить не связанным. Я не знаю, как работают привязки aurelia, но я не думаю, что вы можете связывать функции. Тем не менее, даже если вы можете по-прежнему плохо дизайн. – MikeSW