Javascript 如何在AngularJs中编写收集ng click事件的数组?

Javascript 如何在AngularJs中编写收集ng click事件的数组?,javascript,arrays,angularjs,angularjs-ng-click,Javascript,Arrays,Angularjs,Angularjs Ng Click,我正在处理一个项目,我需要从用户那里收集多个项目并将其发送到服务器。“我的视图”上有一个列表,用户可以在其中单击并选择项目。我的HTML看起来像这样 HTML <div ng-repeat="topicList in searchCtrl.topic"> <div ng-repeat="topicTerm in topicList"> <p>{{topicTerm.number}}&nbsp&nbsp{{topicTerm

我正在处理一个项目,我需要从用户那里收集多个项目并将其发送到服务器。“我的视图”上有一个列表,用户可以在其中单击并选择项目。我的HTML看起来像这样

HTML

<div ng-repeat="topicList in searchCtrl.topic">
    <div ng-repeat="topicTerm in topicList">
       <p>{{topicTerm.number}}&nbsp&nbsp{{topicTerm.name}}</p>
       <div ng-repeat="subTopic in topicTerm.subTopics">
          <a href="" ng-click="searchCtrl.select($event)">{{subTopic.number}}&nbsp&nbsp{{subTopic.name}}</a>
       </div>
    </div>
</div>
<div ng-repeat="topicList in searchCtrl.topic">
  <div ng-repeat="topicTerm in topicList">
    <p>{{topicTerm.number}}&nbsp&nbsp{{topicTerm.name}}</p>
    <div ng-repeat="subTopic in topicTerm.subTopics">
      <a href="" ng-click="searchCtrl.select(subTopic.id, $event)">{{subTopic.number}}&nbsp&nbsp{{subTopic.name}}</a>
    </div>
  </div>
</div>   
我想要的是,单击的子主题ID收集在一个数组“topicIds:[]”中,我可以成功地发送上面提到的POST请求。searchService是一种角度服务,它帮助从服务器获取主题,并将用户输入发布到服务器

这就是我的JSON的样子

JSON API

{  
   "TopicList" :[  
   {
      "id": "798790fa-78c8-4f00-8179-9e70f40adb14",  
      "name": "Topic1",  
      "number": 1.0,  
      "subTopics": [              
          {
             "id": "82c90f2e-deac-4fa4-80f4-d077edacc2dc",  
             "name": "data1.1",  
             "number": 1.1 
          },              
          {
             "id": "0f0c2b89-6dae-4f60-90f8-df49d96b9af9",  
             "name": "data1.2",  
             "number": 1.2
          },    
          {
             "id": "131b68b6-1f45-477f-9b0f-8ac80c5b4f4e",  
             "name": "data1.3",  
             "number": 1.3     
          },           
          {
             "id": "16c8f46d-d20c-48f9-a0c0-e3989763082b",  
             "name": "data1.4",  
             "number": 1.4    
          }   
       ]      
   },
   {
      "id": "9ed3fee0-5347-4f00-9b56-721b61439f88",  
      "name": "Topic2",  
      "number": 2.0,  
      "subTopics": [ 
          {
             "id": "eec13511-1408-4f4b-be6f-8b5a8b6ea28b",  
             "name": "data2.1",  
             "number": 2.1            
          },    
          ...
       ]
   },
   ...
  ]
}   
如何编写通过ng click事件收集ID的函数或数组


提前谢谢

无需使用
$event
,只需在
ng click
中传递
subTopic.id
,或其他任何内容,如
ng click=“searchCtrl.select(subTopic)”

然后在控制器中,您可以:

angular.module('myApp').controller("searchController", function($log, searchService, $scope){
    var self = this;
    var subTopicIds = []; // array to hold subTopicIds

    self.select = function(subTopic) {
        subTopicIds.push(subTopic.id);
    }

    self.initializeSearch = function(){

        self.searchEntry = 
            { 
            "contact":{     
                "person": "",      
                "organization": ""
            },  
            "request": {      
                "input": "",      
                "language": "en"
            },  
            "topicIds": subTopicIds // use the object created previously
            };
    ...

你可以用这样的方式得到一个身份证

<div ng-click="recordClick($event)">Click</div>

我通过在ng click中传递子主题ID作为参数解决了这个问题。根据要求,我需要在用户单击时调用另一个事件,我将其作为第二个参数传递。所以,现在这两个事件都可以通过一次点击来实现

这是我的最新代码

HTML

<div ng-repeat="topicList in searchCtrl.topic">
    <div ng-repeat="topicTerm in topicList">
       <p>{{topicTerm.number}}&nbsp&nbsp{{topicTerm.name}}</p>
       <div ng-repeat="subTopic in topicTerm.subTopics">
          <a href="" ng-click="searchCtrl.select($event)">{{subTopic.number}}&nbsp&nbsp{{subTopic.name}}</a>
       </div>
    </div>
</div>
<div ng-repeat="topicList in searchCtrl.topic">
  <div ng-repeat="topicTerm in topicList">
    <p>{{topicTerm.number}}&nbsp&nbsp{{topicTerm.name}}</p>
    <div ng-repeat="subTopic in topicTerm.subTopics">
      <a href="" ng-click="searchCtrl.select(subTopic.id, $event)">{{subTopic.number}}&nbsp&nbsp{{subTopic.name}}</a>
    </div>
  </div>
</div>   
这就是它解决我问题的方法。
顺便说一句,谢谢汤姆和海神冥王星。

你好,汤姆,谢谢你的回答。$事件不是用于ID的,但我编写了这个用于更改颜色的单击事件。(我的意思是,当用户单击子主题时,背景颜色将发生变化)因此,我认为现在我需要在ng click中应用两个表达式。我做了与您在HTML和控制器代码中提到的相同的事情。但我出现错误(无法读取未定义的属性“id”):(通过编辑添加您在问题中尝试过的内容,以便我们清楚了解如何帮助您,因为这是一个很好的答案!@cverb:嘿,谢谢您的评论。我已经根据Tom的回答解决了这个问题。@Tom:我还有一个问题要问您。在同一个项目中,我将此POST请求发送到服务器并获得响应。)对象。我通过智能表在视图中显示它。在这个生成的JSON对象中,我获得了与data1.1及以后版本相同的id(在JSON API中显示)。但我必须显示该id的name属性(在生成的JSON对象中不可用)。因此,问题是,在处理生成的JSON时,如何访问另一个JSON对象的属性?我希望我的解释可以理解。期待您的回答…:)
angular.module('myApp').controller("searchController", function($log, searchService, $scope){
var self = this;
var subTopicIDs = [];

    self.select = function(TopicIDs, event){
        subTopicIDs.push(TopicIDs);
        $(event.target).addClass('selor');  // This is class which changes the background color of the clicked item
        console.log(TopicIDs);
    }    

self.initializeSearch = function(){

    self.searchEntry = 
        { 
        "contact":{     
            "person": "",      
            "organization": ""
        },  
        "request": {      
            "input": "",      
            "language": "en"
        },  
        "topicIds": subTopicIDs
        };