如何从控制器调用隔离范围指令的方法?

时间:2014-03-05 14:01:18

标签: angularjs angularjs-directive

我有一个指令示例,按下按钮按下旋转加载器: Plunker

我尝试使用isolate scope创建相同的指令。现在,控制器调用scope.initscope.stop方法。

以下是2个按钮的示例。所以我尝试按钮显示私人微调器。

当前的问题是ng-click停止工作。

示例2 Plunker

谢谢,

enter image description here

1 个答案:

答案 0 :(得分:0)

指令的范围将是控制器范围的子节点。您希望尽可能消除控制器与指令之间的任何耦合。因此,您不希望直接调用控制器内的指令中的方法。这会产生直接耦合,这会导致很多问题(使得很难准确测试,并且会对您不想要的代码产生依赖性)。

但是,有时您必须在控制器和指令之间以某种方式 进行通信。有很多方法可以做到这一点。最“标准”的做法是使用指令中的属性。类似的东西:

<button type="submit" loader show-when="valIsTruthy" left="10" ng-click="loadData()" >Load Data</button>

这将允许您在控制器的作用域上指定一​​些值,当控制器的作用域属性为真或假时,它将作为显示或隐藏加载程序的标志。

另一个,在我看来更简化的解决方案是使用范围事件。在您的控制器中,您可以执行以下操作:

$scope.$emit('show-loader');
// more code here
$scope.$emit('hide-loader');

在您的指令中,您可以执行以下操作:

scope.$on('show-loader', function(){
    // write code to show the loader
});
...
scope.$on('hide-loader', function(){
    // hide loader here
});

任何一种方式(或任何其他方式)应该适合你。希望有所帮助。