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 –

相關問題