我在Angular Material中有一个SPA,它显示一个带有汉堡菜单+左侧的mdToolbar
元素。目前该菜单位于我的index.html中,我还设置了一个<ui-view>
元素来呈现视图。
现在我有一个mdList
的视图。当用户选择某些项目时,我希望工具栏中显示删除图标。该删除图标应链接到我的控制器的删除操作,这当然特定于加载的视图,而不是index.html。
我想知道推荐的模式是什么。我可以想办法做些什么,但那些都很难看。我正在考虑在工具栏中有一个占位符区域的方向,我可以用我的视图中的内容替换,其中元素操作(ngClick
)链接到视图控制器的操作。有没有人知道如何做到这一点的好教程或类似代码的例子?
更新
我现在已经实现了一些我很满意的东西,但它还没有完全实现。我所做的是创建一个menuService
,它被注入我菜单后面的控制器中(它不是一个单独的视图,可能但在这种情况下没有区别)。菜单控制器绑定到此服务,其他服务可以在其中注入内容。在我的测试场景中,我注入了一个字符串,然后显示在工具栏中,一切正常。
我现在唯一需要做的就是代替一个字符串,注入一个带有事件处理程序的按钮,该事件处理程序返回到视图的控制器。我还不太确定该怎么做。
另一次更新
所以我创建了这个类:
export class CommandButton {
svgSrc: string;
click: () => void;
}
我可以将其注入我的menuService然后绑定到菜单控制器。适用于图标(按钮出现),但正如人们可能期望的那样(我做了),点击功能不起作用。我在视图控制器中设置如下:
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方法,但事实并非如此。我需要视图中的数据,因为这是选择项目的位置。据我所知,没有任何事情发生,所以绑定在某处失败了。什么是确保click事件对视图控制器功能有用的好方法?我可以做一个$ rootscope。$广播,但感觉很讨厌。
上次更新
没关系,我发现了自己的错误。事件的绑定是不正确的,应该是(注意括号):
<md-button ng-click="button.click()">
答案 0 :(得分:0)
与此同时,我找到了一个很好的方法来做到这一点。帖子本身现在也包含答案。