2

私はオブジェクトの配列を持っています...具体的な例として、Peopleそれぞれpersonが a uniqueID、 a 、 anameを持っている array と呼びましょうtagline

次のように、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 に保存されていない) オブジェクトを見ることができるようにするにはどうすればよいでしょうか?

4

3 に答える 3

6

$scope.clickHandler親コントローラーで定義してみてくださいng-click="clickHandler(person)"。これにより、親スコープが使用され、行ごとに 1 つのコントローラーをインスタンス化する必要がなくなります。

于 2012-08-16T14:59:38.647 に答える
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);    
  }
}

person 変数を持つのはこのスコープです。ここで、clickHandler を宣言することもできます。

People の各人物に対して、新しいスコープと新しいコントローラー ( PersonController ) が作成されることに注意してください。また、Person Controller では、Person にアクセスして操作することができます。

于 2012-08-16T14:47:36.307 に答える