Javascript 在ng repeat中为选中的复选框取值

Javascript 在ng repeat中为选中的复选框取值,javascript,angularjs,checkbox,Javascript,Angularjs,Checkbox,我希望能够只选择一个复选框,并在选中该复选框时在控制器的函数中获取该值 控制器 $foldersArray = [Folder 1 , Folder 2, Folder 3....]; $selectedFolderName = function(){ var folderName = 'folder name ' } 查看 <div class="checkbox"> <ui> <li ng-repeat="folder in folders

我希望能够只选择一个复选框,并在选中该复选框时在控制器的函数中获取该值

控制器

$foldersArray = [Folder 1 , Folder 2, Folder 3....];

$selectedFolderName = function(){
   var folderName = 'folder name '
}
查看

<div class="checkbox">
  <ui>
    <li ng-repeat="folder in foldersArray">
       <label><input type="checkbox" ng-checked="folder" ng-click=selectedFolderName()"/>{{folder}}</label>
   </li>
  </ui>
</div>
像这样,我所有的单选按钮都被选中了…控制台中没有任何内容

编辑添加的插销

这是普朗克:

编辑1

要解决此问题,请执行以下操作:

  • 删除attr ng模型

  • 更改ng更改为ng单击

  • 删除selectedFolderName中的选定阿曲布他丁

  • 看看这个:

    var-app=angular.module('plunker',[]);
    应用程序控制器('MainCtrl',函数($scope){
    $scope.foldersArray=['Folder1','Folder2','Folder3'];
    $scope.selectedFolderName=函数(文件夹){
    var folderName=文件夹;
    console.log(folderName);
    };
    });
    
    
    安古拉斯普朗克
    文件。写(“”);
    
  • {{文件夹}}

  • 您可以这样做:

    我已经更改了ng重复:

  • {{文件夹}}
  • 编辑: 您可以按如下方式操作数据:

    $scope.foldersArray = ['Folder1', 'Folder2', 'Folder3'];
    $scope.foldersArrayNew = {};
    for(var i = 0; i < $scope.foldersArray.length;i++) {
        $scope.foldersArrayNew[$scope.foldersArray[i]] = {selected: false};
    }
    $scope.foldersArray = $scope.foldersArrayNew;
    
    $scope.foldersArray=['Folder1','Folder2','Folder3'];
    $scope.foldersArrayNew={};
    对于(变量i=0;i<$scope.foldersArray.length;i++){
    $scope.foldersArrayNew[$scope.foldersArray[i]]={selected:false};
    }
    $scope.foldersArray=$scope.foldersArray新建;
    
    在AngularJS中,要使单选按钮作为一个组工作,您需要添加
    属性,该属性应仅为字符串

    摘自

    选择时应将ngModel表达式设置为的值。请注意,value只支持字符串值,即范围模型也需要是字符串。如果需要复杂的模型(数字、对象等),请使用ngValue

    因此,通过添加
    value
    修改示例,可以获得所需的结果

    var-app=angular.module(“testapp”,[]);
    应用程序控制器(“arrCntrl”,[“$scope”,函数($scope){
    $scope.foldersArray=[“文件夹1”、“文件夹2”、“文件夹3”];
    $scope.selectedFolder={
    姓名:“
    };
    $scope.selectedFolderName=函数(文件夹){
    console.log($scope.selectedFolder)
    }
    }])
    
    
  • {{文件夹}}


  • 如果只想选择一个单选按钮,则应使用单选按钮。@tymeJV i更新了我尝试使用单选按钮的代码…您使用单选按钮更新的代码仍在使用复选框。@tymeJV misstype i我的代码中有type=“radio”,仍然不起作用。。您能提供一把小提琴吗?您还应该在控制器中将您的方法定义为$scope.selectedFolderName。这是可行的,在控制台中,我获得了选定的文件夹名称。一件不好的事情是,如果我点击文件夹1,然后点击文件夹2,两个单选按钮都保持选中状态……我们在控制器中的ng model=“itemFolder”在哪里使用?它正在工作,但我很困惑:PYou如何删除并运行新的测试。我将ng模型用于控制收音机按钮的选择我看到了,所以我只需要在输入属性中添加name=“folder”。是的,这是可行的,但在foldersArray中,我从服务中获取数据,无法更改数据…@Bukic我添加了一些更改,以便您能够操作data@Alon由于某些原因,只有当我第一次单击文件夹并在控制台中显示时,这才起作用。如果我再次点击同一个文件夹,它不会在控制台中打印任何内容。。。也许是我的错
    $selectedFolderName = function(folder){
           console.log(folder.selected);
        }
    
      <li ng-repeat="(folder,selected) in foldersArray">
        <label>
          <input type="radio" name="folder[]" ng-model="selectedFolder" ng-change="selectedFolderName(folder)">{{folder}}</label>
      </li>
    
    $scope.foldersArray = ['Folder1', 'Folder2', 'Folder3'];
    $scope.foldersArrayNew = {};
    for(var i = 0; i < $scope.foldersArray.length;i++) {
        $scope.foldersArrayNew[$scope.foldersArray[i]] = {selected: false};
    }
    $scope.foldersArray = $scope.foldersArrayNew;