从对象角度ng变化中排除

时间:2017-04-10 12:12:58

标签: angularjs angular-ngmodel angularjs-ng-change

大家好我正在尝试清除我的ng模型,当我触发我的更改功能但我的问题是我不想删除所有我想要排除对象中的一个项目。

function change() {
            if (vm.location.type) {
                angular.forEach(vm.location, function (value, index) {
                    delete vm.location;

                });

            }

        }

所以我不想删除

vm.location.type

我的

vm.location 

具有

              vm.location.boundaries;
              vm.location.region;
              vm.location.address;
              vm.location.name;
              vm.location.nonVisitingRadius;
              vm.location.visitingRadius;

3 个答案:

答案 0 :(得分:1)

请参阅下面的代码,

var obj = { a:123, b:123, c:123 }
delete obj.a;

因此obj会像这样{b:123,c:123}

  

注意:不需要任何for循环来删除对象的属性

更新的答案:

var obj= {
  a: 'aaa',
  b: 'bbb',
  c: 'ccc',
  d: 'ddd'
};

var removeObj = function(obj, props) {

    for(var i = 0; i < props.length; i++) {
        if(obj.hasOwnProperty(props[i])) {
            delete obj[props[i]];
        }
    }

};

removeObj (obj, ["a", "d"]);

答案 1 :(得分:0)

您可以使用临时对象执行此操作:

let tempLocation = {};
tempLocation.type = $scope.location.type;
$scope.location = tempLocation;   

答案 2 :(得分:0)

我不知道我是否正确理解你所要求的内容,但是如果你想要清除对象的所有字段,只保留类型并使用普通的javascirpt保留对象的引用(没有库) ),遍历字段并检查i字段是否等于类型。

for(var i in model.location){
if(i !== 'type')
  delete model[i];
}

使用underscore.js你可以定义一个默认模型,如:

var defaultModel = {
 location: {
   region: '',
   address: '',
   name: '',
   nonVisitingRadius: '',
   visitingRadius: '',
   type: 'defaultvalue'
 }
}

在函数

内触发ng-change时
_.extend(model, defaultModel);

将保留type的默认值并清除所有其他值。