0

我有一個運行ng-repeat一個HTML文件,然後在NG-重複每個項目將產生一個模板,也有它自己的控制器採用NG-init進程從NG重複數據發送到另一個控制器

在html文件我有這樣的:

<div ng-repeat="item in items"> 
    <div ng-include="'template.html" ng-init="getData(item)"></div> 
</div> 

然後這個模板有它自己的控制器。

控制器具有功能的getData(項目),看起來是這樣的:

$scope.getData = function(item){ 
var chapter = item; 
} 

$scope.myVec = chapter.myVec.length; 

template.html樣子:

<div ng-controller = "Controller"> 

<p>{{myVec}}</p> 

</div> 

然後我在控制檯上說得到一個錯誤「無法讀取未定義的屬性「長度」

我在這裏錯過了什麼?控制器是否在定義var chapter的函數之前運行?

+0

而不是使用'ng-include'和'ng-init'內部的'ng-controller',你應該考慮把它作爲一個指令。 'ng-init'在這裏不會真正起作用,因爲它綁定到外部控制器,但是你想要內部控制器上的數據。 – Claies

+0

是的,我想我現在明白了。在ng-init上運行函數只會得到函數範圍內的數據,而不是整個控制器 –

+1

我寫了一個快速指令,*做我認爲你正在嘗試完成的任務*;讓我知道它是否有幫助(或不):http://plnkr.co/edit/aoLzsSmmszeJiVa7znXY?p=preview – Claies

回答

0

我想這是因爲chapter是你的$ scope.getData函數的局部變量。例如

function foo(num){ 
    var myNum=num 
} 
foo(3) 
console.log(myNum) // your will get undefinied 

爲此代替

var myNum 
function foo(num){ 
    myNum=num 
} 
foo(3) 
console.log(myNum) // your will get 3 
+0

我試過在函數現在之前聲明變量,我仍然未定義。也許它是在ng-init被調用到html文件之前「運行」整個代碼的。因此,他不知道對象章節 –

0

實際上問題是從NG-重複烏爾發送的項目(這是一個數組元素,基本類型不是一個對象)的函數的getData( )。這就是爲什麼它返回不能讀取屬性長度未定義。我希望這可以幫助你。

Var items = [ 'apple', 'mango'] ; 
items.length //2 
Items[0].length // error 
+0

中的字段myVec,ng-repeat是向量中的「重複」對象。那麼每個對象都有一個字段,即矢量myVec。所以它應該能夠獲得長度。這絕對是一個範圍問題 –

+0

是的。你是對的。這說得通! – Madhankumar

+0

您可以用一些模擬數據更新您的物品數組嗎?以便我們能夠找出實際問題。 – Madhankumar

相關問題