Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 从指令访问父控制器方法?_Angularjs_Model View Controller_Angularjs Directive_Angularjs Scope_Angular Services - Fatal编程技术网

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

Angularjs 从指令访问父控制器方法?,angularjs,model-view-controller,angularjs-directive,angularjs-scope,angular-services,Angularjs,Model View Controller,Angularjs Directive,Angularjs Scope,Angular Services,我有一个关于物品搜索的问题 假设我有: 带有要显示的结果项的控制器 一种服务,它执行搜索查询并与控制器交互,从而更新结果项以显示 一个指令,它的形式包含搜索字段的所有输入 其中一个按钮是“查看更多项目”按钮。只有当我从查询中收到的响应告诉我有更多的项目要查看时,才会显示它 我在服务中创建了一个函数,该函数检查此属性,并将布尔值返回到指令,该指令使用它,并在按钮上显示或隐藏它 问题是我不知道如何在此范围内与控制器进行交互 指令是否应调用一个服务方法,并且该方法应以某种方式与控制器交互 在此之前,我

我有一个关于物品搜索的问题

假设我有:

  • 带有要显示的结果项的控制器
  • 一种服务,它执行搜索查询并与控制器交互,从而更新结果项以显示
  • 一个指令,它的形式包含搜索字段的所有输入
  • 其中一个按钮是“查看更多项目”按钮。只有当我从查询中收到的响应告诉我有更多的项目要查看时,才会显示它

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

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

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

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

    <form ng-submit="myController.submitSearch">
        <search-options-directive></search-options-directive>
        <button type="submit">
    </form>
    
    
    
    但是现在我要做的是把表单和按钮放在

    <search-options-directive></search-options-directive>
    
    
    
    所以现在我无法直接调用控制器方法


    我应该如何处理这个问题?

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

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

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

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

    这听起来像是“require”的主要示例搜索指令上的选项-简而言之:创建一个控制器为“项目显示控制器”的外部指令。然后,您可以在搜索指令中要求外部指令,瞧,您可以直接访问控制器。这里有一些指定require的compile服务的参考:另一个答案可能更好,但也有
    范围。$parent
    属性。感谢您的反馈。我真正想知道的是做我想做的事情的最佳实践,因为我不知道该采取什么方法,因为我似乎有3个非常相互依赖的元素。最佳实践将遵循基本的物业封装等。为此,我建议按照您已经开始做的那样进入它自己的指令,然后修改我的示例,使用ng submit而不是ng-click@Jeffarese为您做了这项工作,您可以将其应用于您的需要吗?这样,我就不能在调用的方法(父控制器)中使用此指针。它总是使用这个指令。
     ng-click="myFavoriteMethod()"