2015-10-19 69 views
0

我在角

下面一段代碼
$scope.prepare = function(){ 
    $scope.elems = [1,2,3]; 
}; 

$scope.action = function(){ 
    var elem = $scope.elems[0]; //undefined 
} 

然後,我認爲,我使用指令NG-INIT =「準備()」和附加到一個按鈕動作功能上點擊事件

<button ng-click="action()">action</button> 

在動作函數範圍內沒有定義elems數組嗎?

有人可以告訴我爲什麼會發生這種情況嗎?

謝謝!

+0

你能舉一個例子來複制這個嗎? – tymeJV

+2

你確定'prepare()'被調用嗎?我的猜測是不是。也許如果你能給我們提供一個重現這一點的小提琴,我們可以提供更好的幫助。 – dman2306

+0

這兩個代碼在同一個控制器中嗎?如果不是,$ scopes將屬於不同的控制器 – taxicala

回答

2

由於您沒有顯示控制器或調用init()和action()的HTML範圍,所以我甚至無法猜測自從您發佈的代碼發佈後,爲什麼會遇到問題。這是一個pluker證明了:http://plnkr.co/edit/qMzPtJtp9t9CoNKkmWIc?p=preview

<div ng-init="prepare()"></div> 
<input type="button" value="Call function" data-ng-click="action()" /> 
<p>Init Defined: {{elems}}</p> 
<p>Function call: {{redefined}}</p> 


$scope.prepare = function(){ 
    $scope.elems = [1,2,3]; 
    }; 

    $scope.action = function(){ 
    $scope.redefined = $scope.elems[0]; //undefined 
    } 

雖這麼說,你是不是()正確使用NG-INIT。來自Angluar文檔:

「這個指令可能會被濫用,將不必要的邏輯添加到您的模板中,只有少數ngInit的適當使用,比如用於別名的特殊屬性ngRepeat ...以及注入數據通過服務器端腳本,除了這些情況之外,你應該使用控制器而不是ngInit來初始化作用域上的值。「

鏈接到NG-初始化文件:https://docs.angularjs.org/api/ng/directive/ngInit

你會好得多初始化您在控制器陣列。

+0

問題是觸發該操作的按鈕超出了準備範圍。出於這個原因,動作功能被啓用來查看elms數組 – lucasasecas

相關問題