Javascript 制作$scope持有的数据的副本
假设我在Javascript 制作$scope持有的数据的副本,javascript,angularjs,Javascript,Angularjs,假设我在$scope中有几个变量,我想创建一个包含这些变量的新对象,而不包含$scope中包含的所有内部内容。我不一定知道要复制的$scope变量的名称 比如: $scope.a = "Test"; $scope.b = {x: 1, y: 2}; $scope.c = 99; //possibly other unknown variables var obj = angular.copy_without_angular_stuff($scope); 我怎样才能得到相关的数据 可能的解决方
$scope
中有几个变量,我想创建一个包含这些变量的新对象,而不包含$scope
中包含的所有内部内容。我不一定知道要复制的$scope
变量的名称
比如:
$scope.a = "Test";
$scope.b = {x: 1, y: 2};
$scope.c = 99;
//possibly other unknown variables
var obj = angular.copy_without_angular_stuff($scope);
我怎样才能得到相关的数据 可能的解决方案是将一个对象的属性(在本例中为$scope)复制到另一个对象中:
for(var k in $scope) {
secondObject[k] = $scope[k];
}
一种可能的解决方案是将一个对象(在本例中为$scope)的属性复制到另一个对象中:
for(var k in $scope) {
secondObject[k] = $scope[k];
}
你可以用
this
而不是
$scope
控制器:
angular.module('myApp').controller('MyCtrl', function(){
var vm = this;
vm.a = 'test';
vm.b = {a: 'a', b: 'b'};
vm.c = 123;
var obj = vm;
});
angular.module('myApp').controller('My2ndCtrl', function($scope) {
$scope.a = 'test';
$scope.b = {a: 'a', b: 'b'};
$scope.c = 123;
var obj = {};
for(var k in $scope) {
if($scope.hasOwnProperty(k) && k.indexOf('$') < 0) {
obj[k] = $scope[k]
}
}
console.log(obj);
});
在我的视图中,我显示了附加到VM的每个值。以及VM,其中仅显示a、b和c作为附加到VM的对象
vm.a: {{vm.a}}
<br/>
vm.b: {{vm.b}}
<br/>
vm.c: {{vm.c}}
<br/>
vm: {{vm}}
你可以用
this
而不是
$scope
控制器:
angular.module('myApp').controller('MyCtrl', function(){
var vm = this;
vm.a = 'test';
vm.b = {a: 'a', b: 'b'};
vm.c = 123;
var obj = vm;
});
angular.module('myApp').controller('My2ndCtrl', function($scope) {
$scope.a = 'test';
$scope.b = {a: 'a', b: 'b'};
$scope.c = 123;
var obj = {};
for(var k in $scope) {
if($scope.hasOwnProperty(k) && k.indexOf('$') < 0) {
obj[k] = $scope[k]
}
}
console.log(obj);
});
在我的视图中,我显示了附加到VM的每个值。以及VM,其中仅显示a、b和c作为附加到VM的对象
vm.a: {{vm.a}}
<br/>
vm.b: {{vm.b}}
<br/>
vm.c: {{vm.c}}
<br/>
vm: {{vm}}
如果您对使用下划线感到满意,您可以这样做
var obj = _.extendOwn({}, $scope);
否则,只需在循环中手动复制属性
var obj = {};
for(var k in $scope) {
if(Object.prototype.hasOwnProperty.call($scope, k)) {
obj[k] = $scope[k];
}
}
如果您对使用下划线感到满意,您可以这样做
var obj = _.extendOwn({}, $scope);
否则,只需在循环中手动复制属性
var obj = {};
for(var k in $scope) {
if(Object.prototype.hasOwnProperty.call($scope, k)) {
obj[k] = $scope[k];
}
}
$scope
对象有几个从$
开始的间隔属性,因此作为解决方法,您可以只复制不从$
开始的属性,甚至为内部$scope
属性创建映射,如果属性不在映射中,则复制它。注意:不同角度版本的内部属性列表可能不同
angular.module('app',[])
.控制器('ctrl1',功能($scope){
功能clearCopy(范围){
var dest={};
对于(范围内的var i){
if(scope.hasOwnProperty(i)和&i[0]!='$'和&i!=='this'){
dest[i]=范围[i];
}
}
返回目的地;
}
$scope.a=“测试”;
$scope.b={
x:1,
y:2
};
$scope.c=99;
$scope.copy1=clearCopy($scope);
})
.controller('ctrl2',函数($scope){
功能clearCopy(范围){
var InternalPropertiesMap={
$$ChildScope:true,
$$childHead:对,
$$childTail:是的,
$$listenerCount:true,
$$侦听器:对,
$$nextSibling:对,
$$Previsibling:对,
$$观察者:没错,
$$watchersCount:正确,
$id:是的,
$parent:对
},
dest={};
对于(范围内的var i){
if(scope.hasOwnProperty(i)和&!internalpropertiesmap[i]){
dest[i]=范围[i];
}
}
返回目的地;
}
$scope.a=“测试”;
$scope.b={
x:1,
y:2
};
$scope.c=99;
$scope.copy2=clearCopy($scope);
}).控制器('ctrl3',功能($scope){
功能clearCopy(范围){
var InternalPropertiesMap={
$$ChildScope:true,
$$childHead:对,
$$childTail:是的,
$$listenerCount:true,
$$侦听器:对,
$$nextSibling:对,
$$Previsibling:对,
$$观察者:没错,
$$watchersCount:正确,
$id:是的,
$parent:对
};
返回对象。键(范围)。减少(功能(acc,el){
if(el[0]!='$'&&typeof作用域[el]!==“函数”){
acc[el]=范围[el];
}
返回acc;
}, {});
}
$scope.a=“测试”;
$scope.b={
x:1,
y:2
};
$scope.c=99;
$scope.fun=函数(d){返回d;};
$scope.copy3=clearCopy($scope);
log($scope.copy3);
});代码>
副本1:{{copy1}}
副本2:{{copy2}}
副本3:{{copy3}}
$scope
对象有一些从$
开始的间隔属性,因此作为解决方法,您可以只复制不从$
开始的属性,甚至为内部$scope
属性创建映射,如果属性不在映射中,则复制它。
注意:不同角度版本的内部属性列表可能不同
angular.module('app',[])
.控制器('ctrl1',功能($scope){
功能clearCopy(范围){
var dest={};
对于(范围内的var i){
if(scope.hasOwnProperty(i)和&i[0]!='$'和&i!=='this'){
dest[i]=范围[i];
}
}
返回目的地;
}
$scope.a=“测试”;
$scope.b={
x:1,
y:2
};
$scope.c=99;
$scope.copy1=clearCopy($scope);
})
.controller('ctrl2',函数($scope){
功能clearCopy(范围){
var InternalPropertiesMap={
$$ChildScope:true,
$$childHead:对,
$$childTail:是的,
$$listenerCount:true,
$$侦听器:对,
$$nextSibling:对,
$$Previsibling:对,
$$观察者:没错,
$$watchersCount:正确,
$id:是的,
$parent:对
},
dest={};
对于(范围内的var i){
if(scope.hasOwnProperty(i)和&!internalpropertiesmap[i]){
dest[i]=范围[i];
}
}
返回目的地;
}
$scope.a=“测试”;
$scope.b={
x:1,
y:2
};
$scope.c=99;
$scope.copy2=clearCopy($scope);
}).控制器('ctrl3',功能($scope){
功能clearCopy(范围){
var InternalPropertiesMap={
$$ChildScope:true,
$$childHead:对,
$$childTail:是的,
$$listenerCount:true,
$$侦听器:对,
$$nextSibling:对,
$$Previsibling:对,
$$观察者:没错,
$$watchersCount:正确,
$id:是的,
$parent:对
};
返回对象。键(范围)。减少(功能(acc,el){
if(el[0]!='$'&&typeof作用域[el]!==“函数”){
acc[el]=范围[el];
}
返回acc;
}, {});
}
$scope.a=“测试”;