【问题标题】:AngularJS - Access a parent controller from child -> child directive with the controllerAs notationAngularJS - 使用 controllerAs 表示法从 child -> child 指令访问父控制器
【发布时间】:2015-07-08 12:43:07
【问题描述】:

我想从我的指令中的 parent => 父控制器访问一个函数(使用 controllerAs 表示法)。我正在使用角度 1.3.14 我有以下结构:

  • 控制器(带保存功能)
    • (儿童)控制器
      • 带有模板(和隔离范围)的指令。在这个模板中,我有一个按钮,它应该从父(父)控制器调用保存函数。

我不想调用 $scope.$parent.$parent.save(...) 有人有想法吗?

提前致谢。

【问题讨论】:

  • 只需在子指令的范围内使用 save:^ 并在 html 的指令属性中传入父函数。或者您可以在子指令中要求父控制器。

标签: angularjs angularjs-directive angularjs-scope


【解决方案1】:

除了将所需的函数传递给指令之外,没有其他好的方法可以做到这一点。这就是在隔离范围声明中使用 & 的目的。

https://docs.angularjs.org/guide/directive

如果函数只是一个实用函数,当然还有更简单的方法。你可以只注册一个过滤器。但是如果您希望子指令在某些事件中改变父控制器的状态,那么使用& 是最好的解决方案。

如果您需要子指令将参数传递给正在传递给它的函数,那么您将需要使用上述文档中与这句话相关的功能:

这是在指令中通过调用 close({message: 'closing 目前'})。然后局部变量消息将在 关闭表达式。

【讨论】:

    【解决方案2】:

    只使用 $scope.save()。

    在 Angular 中有 scope hierarchy 并且通过调用 $scope.save() 指令将在指令的范围内查找,如果没有 save() 方法,它将在父级的范围内查找,依此类推。 一个条件是没有isolated scope 指令。

    【讨论】:

    • 如果你有独立的作用域,那么你仍然可以将一些方法/变量从父级传递给指令。尽管如此,如果您的指令严重依赖父控制器,那么它不应该具有孤立的范围。你需要为这个指令做一个例外
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2014-12-27
    • 2015-11-07
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2017-02-07
    相关资源
    最近更新 更多