AngularJS - 将指令中的参数传递回控制器

时间:2017-10-02 14:59:56

标签: javascript angularjs

我是Javascript和AnuglarJS的新手,但我有一些Java经验。我正在研究AngularJS developer's guide on directive,并有一个问题。

在"创建包含其他元素的指令"有一个example/demo。在示例/演示中:

指令myDialog的模板如下:

<div class="alert">
  <a href class="close" ng-click="close({message: 'closing for now'})">&times;</a>
  <div ng-transclude></div>
</div>

我在这里无法理解close({message: 'closing for now'})。根据指令的定义:

scope: {
  'close': '&onClose'
}

所以close是对指令父母onClose的引用。 onClose未在控制器中定义,但作为属性显示在其模板中,并进一步引用hideDialog(message)

<div ng-controller="Controller">
  {{message}}
  <my-dialog ng-hide="dialogIsHidden" on-close="hideDialog(message)">
    Check out the contents, {{name}}!
  </my-dialog>
</div>

问题:

  1. 由于onClose未在控制器中明确定义,如何处理和处理从指令传递的任何输入参数?
  2. 控制器中的
  3. hideDialog采用字符串参数,但指令中的close将对象{message: 'closing for now'}传递给onCloseonClose如何从输入的message键中提取值并将其传递给目标函数hideDialog

1 个答案:

答案 0 :(得分:1)

Angular Directives有多种定义值的方法,然后可以绑定到指令的控制器。 '&amp;'是如何将函数从父控制器传递给指令控制器。在上面定义的实例中,父控制器(Controller)在其“范围”(实际上并不酷)上有一个方法(hideDialog),它接受一个参数(消息)。 '&amp; onClose'绑定到指令控制器的'close'变量。当调用'close'时,它需要传递'message',就像它是一个命名参数一样(这里是es6 sorta)。这是因为指令控制器的变量扩展了父控制器的方法,以及如何将变量传递给该方法。