2012-08-16 123 views
2

我有對象的一個​​具體實例的陣列...,我們稱之爲數組People,其中每個personuniqueID,一個nametagline如何從模型數據返回到控制器

我使用foreach模板來顯示這些人的名單,像這樣:

<ul> 
    <li ng-repeat="person in People"> 
     {{person.name}}: {{person.tagline}} 
     ... 

夠簡單採取從控制器並實現同步到模型中的數據。

現在,我想點擊一個人,並做一些複雜的信息。像這樣:

<ul ng-controller="myCtrl"> 
    <li ng-repeat="person in People" ng-click="clickHandler($event)"> 
     ... 

現在,我有這樣的訪問DOM元素:

$scope.clickHandler = function($event) { 
    var domElement = $event.currentTarget; 
     ... 

但是,我怎麼從相關person對象(被點擊的一個數據),以便我可以查看他們的uniqueID(這不存儲在DOM中)?

回答

3

無論何時使用ng-repeat,都應該記住它會創建一個新的範圍。該範圍從父範圍繼承。但是對於ng-repeat中的每個項目,都會創建一個新的作用域。

爲了訪問此範圍,您還必須引入一個控制器,該控制器將與該範圍一起工作。所以,你必須做的

<li ng-repeat="person in People" ng-click="clickHandler($event)" ng-controller="PersonController"> 
... 

在JavaScript

function PersonController($scope){ 
    //In here you will be able to access the person from "person in People" 

    $scope.clickHandler = function($event){ 
    console.log($scope.person);  
    } 
} 

這是此範圍內將有專人變量。現在,你也可以在這裏聲明一個clickHandler。

您應該注意,對於People中的每個人,將創建一個新範圍以及一個新控制器(PersonController)。而且在你的人員控制器中,你將能夠訪問和操縱你的人到你的心中。

+0

好吧,這對我的作品。謝謝。 – Chuck 2012-08-16 14:51:13

+0

你能幫我訪問父範圍嗎?在HTML中(我希望將人員範圍傳遞到點擊處理程序)或PersonCtrl內(我可以要求PersonCtrl。$ scope.parent獲取數據?) – Chuck 2012-08-16 15:12:35

+0

您能描述一下您的場景嗎?除非絕對必要,否則您不應該訪問父範圍! – ganaraj 2012-08-16 15:27:48

6

嘗試父控制器和ng-click="clickHandler(person)"上定義$scope.clickHandler,有了這個,你將使用父範圍,不需要instancie一個控制器的每一行

+0

Duh謝謝..... – Chuck 2012-08-16 15:41:17

相關問題