我希望能够将参数传递给ng-outlet引入的子组件。但我不知道该怎么做。
以下是我的组件绑定示例:
app.component('profile', {
bindings: {
section: '=',
currentUser: '<'
},
...
通常我会这样调用它:
<profile section="$ctrl.bio" current-user="$ctrl.selectedUser"></profile>
但我有这个:
<ng-outlet></ng-outlet>
和传递配置文件的路由器。
$routeConfig: [
{ path: '/Profile/:id', name: 'Profile', component: 'profile' }]
那么如何将火焰传递给此组件的其他基本绑定(可能是无法编码到URL中的绑定)?
谢谢,非常感谢帮助
编辑:我被要求提供一个更具体的例子,说明我想做什么。
我认为概念问题相当清楚,但这是一个特殊情况,传递路线参数显然不够。在我的App组件级别说我有一个事件回调函数onDeleteItem(id)
我如何复制
bindings: {
onDeleteItem: "&"
}
...
<some-component on-delete-item="$ctrl.onDeleteItem(id)"></some-component>
带有ng-outlet?
答案 0 :(得分:6)
我查看了docs并看到了路由器中使用的其中一个组件
bindings: { $router: '<' }
所以我认为如果可以填写绑定,那么为什么我们不能为其他绑定传递数据,但是我查看了组件路由器的来源,我实际上并没有看到一种以这种方式传递数据的方法。这是因为它看起来像是specially handling passing in the $router,但我不认为模板在此之后被修改:
activate(instruction) {
...
this.controller.$$template = '<' + dashCase(componentName) + ' $router="::$$router"></' + dashCase(componentName) + '>';
...
};
我会说,你应该能够使用
$routeConfig: [
{ path: '/Profile/:id', name: 'Profile', component: 'profile', data: { item1: 'item1'} }]
然后在组件的构造函数中注入RouteData,但我认为这只是在角度2中,因为我没有在angular 1路由器中看到它的实现。
因此,根据我所做的研究,我认为你不能,或者很困难。另外,相关:How to inject data into Angular2 component created from a router和https://github.com/angular/angular/issues/4452
答案 1 :(得分:5)
即使通过ngOutlet,您也可以使用此处https://docs.angularjs.org/guide/component指定的require参数来要求父组件。这样,您就可以与子组件中的父组件进行通信(即使父组件通过ngOutlet调用子组件)。这使得来自child =&gt;的通信成为可能。家长。关于parent =&gt;孩子,你仍然可以使用相同的技术,即使感觉有点尴尬(你打电话给孩子的父母得到你需要的......)。也许更标准的东西已经存在,或者很快就会实施。