选中/取消选中复选框时填充/清除阵列

时间:2015-08-07 11:57:34

标签: javascript html angularjs

我目前正在使用angular-google-maps来构建包含多种不同标记类型的地图。在我的地图下面,我有一组简单的复选框,如下所示:

<div class="mapOptions">
  <form action="" class="form-inline" style="text-align:center">
    <label for="">General:</label>
    <input type="checkbox" checked value="Games">
    <label for="" style="color:#000033">Games</label>
    <input type="checkbox" checked value="Practices">
    <label for="" style="color:#ffd900">Practices</label>
  </form>
</div>

在我的控制器中,我初始化空数组,然后通过调用我的API端点用'markers'填充它们:

vm.markersGames = [];
vm.markersPractices = [];

我想要做的是在取消选中其复选框时清除每个相应的数组(例如:用户取消选中'Games',我的控制器中的方法设置vm.markersGames = []),并在复选框点击时重新填充每个数组(例如:用户检查“实践”,我的控制器中的方法调用API端点并填充vm.markersPractices)。

我遇到的问题是不知道如何正确地向我的input添加“检查/取消选中处理程序”。

选中时尝试重新加载标记:

vm.checkToggle = function(isChecked, value) {
  if (!isChecked) {
    vm[value] = [];
  } else {
    getPlayerAddress();
    $scope.$apply();
  }
};

getPlayerAddress()调用API来填充标记数组。

1 个答案:

答案 0 :(得分:1)

您可以使用 ngChange 指令来收听输入的更改。

以下是一个例子:

<强>控制器

(function(){

function Controller($scope, Service) {

  //Object to know if the input is checked or not
  $scope.form = {};

  $scope.markersGames = [];

  $scope.markersPractices = [];

  //isChecked : input checked or not
  //value : keyname of your array, for example markersGames
  $scope.change = function(isChecked, value){
    !isChecked
    //If input is not checked, set our $scope[value] to empty array
    ? $scope[value] = []
    //If the input is checked, call Service
    : Service.get(value).then(function(data){
      //Retrieve and set data
      $scope[value] = data;
    });
  }

}

angular
.module('app', [])
.controller('ctrl', Controller);

})();

然后,您可以使用承诺提供服务的服务

<强>服务

(function(){

  function Service($q){

    function get(url){

      var defer = $q.defer();
      var promise = defer.promise;

      if (url === 'markersGames') {
        defer.resolve([1,2,3,4]);
      } else {
        defer.resolve([4,6,8,1,5,2]);
      }
      return promise;

    }

    var factory = {
      get: get
    };

    return factory;

  }

  angular
    .module('app')
    .factory('Service', Service);

})();

然后你可以在你的html中添加 ngChange 指令:

<强> HTML

 <body ng-app="app" ng-controller="ctrl">

    <form action="" class="form-inline" style="text-align:center">
     <label for="">General:</label>
     <input type="checkbox" checked value="Games" ng-model="form.game" ng-change="change(form.game, 'markersGames')">
     <label for="" style="color:#000033">Games</label>
     <input type="checkbox" checked value="Practices" ng-model="form.practice" ng-change="change(form.practice, 'markersPractices')">
     <label for="" style="color:#ffd900">Practices</label>
   </form>

   {{markersGames}}
   {{markersPractices}}


  </body>