从视图中更改共享的 md工具栏



我在 Angular Material 中有一个 SPA,它显示一个带有汉堡菜单 + 左侧导航的mdToolbar元素。该菜单目前驻留在我的索引中.html我还在其中设置了一个<ui-view>元素来呈现视图。

现在我有一个带有mdList的视图。当用户选择某些项目时,我希望工具栏中出现一个删除图标。该删除图标应链接到我的控制器的删除操作,该操作当然特定于加载的视图,而不是索引.html。

我想知道为此推荐的模式是什么。我可以想到一些方法,但那些方法很丑陋。我正在考虑能够在工具栏中有一些占位符区域的方向,我可以用我的视图中的内容替换它,其中元素操作(ngClick)链接到视图控制器的操作。有谁知道如何做到这一点的好教程或类似代码笔的示例?

更新

我现在已经实现了一些我很满意的东西,但它还没有完全实现。我所做的是创建一个注入菜单后面的控制器中的menuService(这不是一个单独的视图,可能是但在这种情况下没有区别)。菜单控制器绑定到此服务,其他服务可以在其中注入内容。在我的测试场景中,我注入了一个字符串,然后显示在工具栏中,一切正常。

我现在唯一需要做的就是注入一个带有事件处理程序的按钮,而不是字符串,该事件处理程序返回到视图的控制器。我还不太确定该怎么做。

另一个更新

所以我创建了这个类:

export class CommandButton {
    svgSrc: string;
    click: () => void;
}

我可以将其注入到我的菜单服务中,然后绑定到菜单控制器。图标工作正常(出现按钮),但正如人们所期望的那样(我做到了),单击功能不起作用。我在视图控制器中设置如下:

var deleteButton = new Services.CommandButton();
deleteButton.svgSrc = 'icons/ic_delete_24px.svg';
deleteButton.click = this.deleteLogs;
this.menuService.setButtons([deleteButton]);

this.deleteLogs的代码很简单:

deleteLogs() {
    console.log('deleting logs');
}

按钮的代码:

<div ng-repeat="button in ctrl.buttons">
    <md-button ng-click="button.click">
         <md-icon md-svg-src="{{button.svgSrc}}" class="md-icon md-24"></md-icon>
    </md-button>
</div>

我希望这会触发视图控制器中的 deleteLogs 方法,但事实并非如此。我需要视图中的数据,因为这是选择项目的位置。据我所知,什么也没发生,所以绑定在某处失败。确保单击事件对视图控制器功能的影响的好方法是什么?我可以做一个$rootscope.$broadcast但这感觉很黑客。

上次更新

没关系,我发现了自己的错误。事件的绑定不正确,应该是(注意括号):

<md-button ng-click="button.click()">
与此同时,

我想出了一个很好的方法来做到这一点。帖子本身现在也包含答案。

最新更新