从指令访问父控制器方法?

时间:2015-04-21 15:38:19

标签: angularjs model-view-controller angularjs-directive angularjs-scope angular-services

我对某个关于商品搜索的页面有疑问。

让我说我有:

  1. 控制器要显示的结果项
  2. 执行搜索查询并与控制器互动的服务,以便更新结果项目以显示
  3. 指令,其表单包含搜索字段的所有输入。
  4. 其中一个按钮是“查看更多项目”按钮。只有在我从查询中收到的响应告诉我还有更多要查看的项目时,才会显示它。

    我在服务中创建了一个函数,该函数检查此属性并返回一个布尔值到指令,该指令使用它与按钮上的ng-show来显示或隐藏它

    问题是我不知道如何与此范围内的控制器进行交互。

    指令是否应该调用一个服务方法,并且此方法应该以某种方式与控制器进行交互?

    在此之前,我使用表单标签(在指令范围之外)包装指令,然后我可以使用ng-submit在控制器上执行某些操作来调用服务即可。像这样:

    <form ng-submit="myController.submitSearch">
        <search-options-directive></search-options-directive>
        <button type="submit">
    </form>
    

    但是现在我要做的是将表单和按钮放在

    <search-options-directive></search-options-directive>
    

    所以现在我没有权限直接调用 controller 方法。

    我该如何处理?

1 个答案:

答案 0 :(得分:0)

我的答案对你的标题更具体,“从指令访问父控制器方法。”在您的指令中,您必须添加要共享的方法:

return {
   scope: {
     myFavoriteMethod:'&'
   }
}

然后开始:

<search-options-directive my-favorite-method="myMethodOnTheParentController"></search-options-directive>

在你的指令中,你需要添加到你的html:

 ng-click="myFavoriteMethod()"

但在您的示例中,您使用的是ng-submit按钮,它将表达式绑定到onsubmit事件(覆盖原始提交操作),这与ng-click不同,但您应该能够使用相同的模式。