1

我是Angular JS的新手,所以可能我的问题很简单,但实际上我没有找到解决方案。Angular JS - 在外部控制器中调用指令功能

我想知道是否有可能从外部控制器访问函数(在指令中的链接函数内)。我正在使用指令来控制指令所需的一些变量,并且我需要访问控制器中的一个变量。我试图在指令中创建一个函数为:

scope.testArray = [{id=1, text="test1"},{id=2, text="test2"}];   
    scope.getTestArray = function() { 
      return scope.testArray() 
    }; 

而且从我的控制器我想这样称呼它:

var testArray = scope.getTestArray() 

但它说,getTestArray不存在的元素(范围)。我认为这是因为对指令中的范围变量的更改从控制器不可见。那么,有没有办法实现我想要做的事情?

感谢您的帮助,您可以给我

+0

为什么使用函数?你可以简单地做'var testArray = $ scope.testArray;' – AlwaysALearner

+0

我同意Codezille。利用双向绑定。在指令中使用'='符号。通过这种方式,您可以修改阵列内部和外部的指令,并且双方共享同一个对象。 – Martijn

+1

指令旨在实现DOM特定的功能。例如ng-repeat用动态数据重复一段特定的html。你确定你不应该使用服务吗?我需要更多的上下文让你的示例代码给出具体的答案 – Anton

回答

1

您控制器的指令被加载之前被实例化。你可以简单地通过延迟呼叫指令功能:

$timeout(function(){ 
    var testArray = $scope.getTestArray() 
},1000); 

或者你不需要将它包装在一个函数中。只需执行以下操作:

$timeout(function(){ 
    var testArray = $scope.testArray; 
},1000); 
+0

你可能是正确的实例化。但这有点像症状而不是实际问题 – Anton

+0

您也可以使用$ evalAsync()而不是$ timeout:http://stackoverflow.com/a/17795815/215945 –

相关问题