从视图

时间:2016-07-11 18:18:27

标签: javascript angularjs angular-ui-router angular-material

我在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()">

1 个答案:

答案 0 :(得分:0)

与此同时,我找到了一个很好的方法来做到这一点。帖子本身现在也包含答案。