2015-12-08 94 views
0
var app = angular.module('app',[]); 

app.controller('ctrl', function($scope){ 
    $scope.processResultCodeList = [{key:"PRCO00",value:"All"} 
         , {key:"PRCO04",value:"Confirm"} 
         , {key:"PRCO06",value:"Return"} 
         , {key:"PRCO09",value:"Request"}]; 
    $scope.tempList = ["PRCO06","PRCO04"]; 
}) 
.directive('checkModel', function($compile){ 
    return { 
     restrict: 'A', 
     scope: { 
      checkModel:"=", 
      checkData:"=" 
     }, 
     link: function postLink(scope,elem, attrs){ 
      elem.on('change',function(event){ 
       console.log(event.target.checked); 
       if(event.target.checked){ 
       if(scope.checkModel.some(elem=>elem!=scope.checkData)){ 
        scope.checkModel.push(scope.checkData); 
       } 
      }else{ 
       scope.checkModel = scope.checkModel.filter(elem=> elem!=scope.checkData); 
      } 
      scope.$apply(); 
      $compile(elem.contents())(scope); 
      }); 
      scope.$watch('checkModel', function(newData, oldData){ 
      scope.checkModel = newData; 
      if(scope.checkModel.some(elem=>elem!=scope.checkData)){ 
       attrs.$set('checked',''); 
      } 
      if(scope.checkModel.some(elem=>elem==scope.checkData)){ 
       attrs.$set('checked','checked'); 
      } 
      },true); 

    } 
}; 

})角度指令 - 为什么不更新指令中的变量?

我通过使用密钥和地图组成的对象列表创建复选框。完整的复选框是绑定数组变量,在选中或取消选中时添加和删除变量的键。奇怪的值可以插入到变量中,但是,为什么不删除该值?

jsfiddle

P.S)很抱歉,但我不擅长英语。所以如果你看到错误的话,请告诉我。谢谢。

回答

0

尝试拼接阵列

if(event.target.checked){ 
      if(scope.checkModel.some(elem=>elem!=scope.checkData)){ 
       scope.checkModel.push(scope.checkData); 
      } 
     }else{ 
      scope.checkModel.splice(scope.checkModel.indexOf(scope.checkData),1) 
     } 

工作的jsfiddle:http://jsfiddle.net/bgrpm2ap/20/

+0

谢谢! :)但是这个案子有什么问题?也许,我不能在隔离范围内初始化? – rainyseason