간단한 하단 다중 선택angularjs 실현

11554 단어 angular
작업 중에 밑에 있는 여러 개의 구성 요소를 사용해야 하기 때문에 일부 자료를 찾아봤는데 어떤 구성 요소는 매우 복잡하다고 느꼈다. 나는 기본적인 기능을 실현하기만 하면 수요와 자료를 결합시켜 스스로 통합했다. 다음은 완전한 코드 실현이다.
(function ( angular ) {
    'use strict';

    angular.module( 'angularMultiSelect', [] ).directive("multiSelect", function($document){
 var template =  "
{{selectedName}}
"; template += "
"; template += "; template += "
  • "
  • ; template += " {{item.name}}
    "
    ; return { restrict:"AEC", template:template, scope:{ type:"@", data:'=', itemClicked: '&', }, link:function(scope, element, attrs, controller){ //$compile(element.contents())(scope); }, controller:function($scope){ function contains(collection, target) { var containsTarget = false; collection.some(function(object){ if (object === target) { containsTarget = true; return true; } return false; }); return containsTarget; } $document.on('click', function(e){ if ($scope.drop){ var target = e.target.parentElement; var parentFound = false; while (angular.isDefined(target) && target !== null && !parentFound) { if (!!target.className.split && contains(target.className.split(' '), 'multiSelectContainer') && !parentFound) { parentFound = true; } target = target.parentElement; } if (!parentFound) { $scope.$apply(function(){ $scope.drop=false; }); } } }); $scope.selectedName=""; $scope.selectedName=" "; $scope.selecteditems = ""; $scope.titleShow = true; $scope.isAll=true; var selecteditem = []; var selectedName=[]; var item={id:"",name:""}; var map = Array.prototype.map; var watch= $scope.$watch('data',function(newValue,oldValue,scope){ if(newValue){ selecteditem = map.call(newValue, function(value) { return value.id; }); selectedName= map.call(newValue, function(value) { return value.name; }); watch(); } }); $scope.selectAll=function($event,values){ var checkbox = $event.target; var action = (checkbox.checked?'add':'remove'); var map = Array.prototype.map if(action == 'add' ){ selecteditem = map.call(values, function(value) { return value.id; }); selectedName=map.call(values,function(value){return value.name;}); }else if(action == 'remove' ){ selecteditem = []; selectedName=[]; } ($scope.itemClicked|| angular.noop)({ $item: {id:selecteditem,name:selectedName}, $type: $scope.type, }); $scope.selectedName=selectedName.toString(); } $scope.checkboxClick = function(item,$event){ console.log("innerdrop"+ $scope.drop); $scope.isAll=false; var idx = selecteditem.indexOf(item.id); if($scope.inputType ==="radio"){ selecteditem = []; } if (idx > -1) { selecteditem.splice(idx, 1); selectedName.splice(idx,1); console.log('names'+selectedName); }else { selecteditem.push(item.id); selectedName.push(item.name); } //$scope.selecteditems = selecteditem.join(); if(selecteditem.length>0){ $scope.titleShow = false }else{ $scope.titleShow = true } ($scope.itemClicked|| angular.noop)({ $item:{id:selecteditem,name:selectedName}, $type: $scope.type, }); $scope.selectedName=selectedName.toString(); } $scope.isChecked = function (item){ return selecteditem.indexOf(item) > -1; } $scope.dropDowncontent = true; $scope.toggleAction = function(){ $scope.drop=!$scope.drop; } $scope.hideSelect=function(){ $scope.drop=false; } } } }); })( angular );

    좋은 웹페이지 즐겨찾기