指令与控制器对话,但不能调用驻留在控制器中的函数

时间:2014-04-20 10:06:11

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-controller

我有一个需要从主控制器调用函数的指令,但每次我尝试引用指令内部的函数都没有发生,因为它是未定义的。当我访问例如$ scope.someProp的值时,我确实得到了所需的响应,但是当我调用该函数时却没有。

其他人遇到过这个问题?有什么建议吗?

2 个答案:

答案 0 :(得分:4)

少数事情:

  • 您的控制器在作用域上公开了startChange函数,因此您需要在作用域上调用它,即&#;; scope.startChange()'在指令范围内而不是' startChange()'
  • 您的确认指令使用隔离范围,如果您知道自己在做什么,这很好,但实质上它会让您从您尝试调用函数的父范围中切断

在这种情况下你有3个选项

  1. 使用Scope $ emit / $ broadcast来共享状态
  2. 使用隔离范围 和'&'在父上下文中执行表达式的语法 范围 - 示例http://plnkr.co/edit/8UEDpoS6ie5qtFc8e08h?p=preview
  3. 不使用隔离范围并执行startChange函数 关于指令的范围与范围相同 控制器 - 例如:http://plnkr.co/edit/h1T2QNOL7wGNG0eprLMC?p=preview

答案 1 :(得分:1)

如果您可以更改值,为什么不让控制器观察这些值并在更改时运行所需的功能?

$scope.$watch('myScopeVar', function(newValue, oldValue){
    if(oldValue !== newValue){
        $scope.someFunction();
    }
});

我不是说这是最好的方法,但它应该有效。但请注意范围问题。如果您的指令使用隔离范围,则可能必须使用指令更改服务中的值并且控制器按上述方式监视该服务值的服务。再次,不理想,但应该工作。