【发布时间】:2015-06-28 21:19:39
【问题描述】:
我有一个关于项目搜索的页面的问题。
假设我有:
- 具有要显示的结果项的控制器
- 一个服务,它执行搜索查询并与控制器交互以更新要显示的结果项
- 一个指令,其表单包含搜索字段的所有输入。
其中一个按钮是“查看更多项目”按钮。仅当我从查询中收到的响应告诉我有更多要查看的项目时,才应显示它。
我在 service 中创建了一个函数,它检查此属性并将布尔值返回给 directive,该指令将其与按钮上的 ng-show 一起使用以显示或隐藏它。
问题是我不知道如何在这个范围内与控制器进行交互。
指令是否应该调用一个服务方法并且该方法应该以某种方式与控制器交互?
在此之前,我使用表单标签(在指令范围之外)包装指令,然后我可以使用 ng-submit 在 controller 上执行一些操作以调用 服务。像这样:
<form ng-submit="myController.submitSearch">
<search-options-directive></search-options-directive>
<button type="submit">
</form>
但现在我要做的是将表单和按钮放入
<search-options-directive></search-options-directive>
所以现在我无法直接调用 controller 方法。
我应该如何处理这个问题?
【问题讨论】:
-
这听起来像是搜索指令中“require”选项的主要示例——简而言之:创建一个外部指令,其控制器是“项目显示控制器”。然后您可以在搜索指令中要求外部指令,瞧,您可以直接访问控制器。以下是指定要求的编译服务的一些参考:docs.angularjs.org/api/ng/service/$compile
-
另一个答案可能更好,但也有
scope.$parent属性。
标签: angularjs model-view-controller angularjs-directive angularjs-scope angular-services