我正在使用TypeScript处理Angular 2.我有用户管理组件,我有整个用户的表.
当单击表中的任何用户时,然后形成具有要编辑的整个属性的外观.选择用户发生事件如下:
onUserSelected(event) {
var selectedId = event.data.id;
this.selectedUser = this.users.filter(user => user.id === selectedId)[0]
}
Run Code Online (Sandbox Code Playgroud)
问题是当正在编辑selectedUser时,他的属性也会在表中发生变化而且看起来不太好.我尝试自己创建副本如下,但它没有帮助 - 用户类
clone() {
var cloned = new User(this.id, this.login, this.name, this.surname, this.phone);
return cloned;
}
Run Code Online (Sandbox Code Playgroud)
也许我正在做一些在Angular2中不好的做法?
可能重复:
克隆JavaScript对象的最有效方法是什么?
如何使用以下引用克隆js对象:
{ ID: _docEl,
Index: next,
DocName: _el
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
此示例创建一个对象,冻结它,然后从冻结对象创建一个新对象.如果第二个对象尝试更改测试属性,则不能.它保持冻结,第一个对象的值为10.
//Create an object and freeze it
var first = {
test: 10
};
Object.freeze(first);
//Create a second object from the first one and
//try and change the new test property (you can't)
var second = Object.create(first);
second.test = 20;
console.log(second.test); //10
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
是second.test
新对象的新属性,还是只是对冻结的第一个对象中的属性的引用?
是否可以将冻结first.test
用作默认值,但是second.test
如果需要则覆盖它?
我问的原因是因为我想将一个不可变的基础对象作为具有默认值的模板,然后使用它来创建我可以自定义的新对象.对此最好的方法是什么?
谢谢!
请参阅下面的我的代码段.如何获得已更改模型的旧值,在这种情况下是vuejs中的年龄?
var app = new Vue({
el:"#table1",
data:{
items:[{name:'long name One',age:21},{name:'long name Two',age:22}]
},
methods:{
changeAge:function(item,event){
alert(item.age);
}
}
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<table class="table table-cart" id="table1">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in items">
<td>{{item.name}} :</td>
<td>
<input type="text" name="qty"
v-model="item.age"
@change="changeAge(item,$event)">
</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用手表,但我无法找到任何帮助来观察一系列物品的年龄.
我正在我的组件中接收道具。我想在这个组件中添加一个带有道具的属性“LegendPosition”。我无法做到这一点。请帮我解决一下这个。我已经尝试过这段代码,但没有成功:
var tempProps = this.props;
tempProps.legendPosition = 'right';
Object.preventExtensions(tempProps);
console.log(tempProps);
Run Code Online (Sandbox Code Playgroud) 我试图在Javascript中克隆一个对象.我已经创建了自己的"类",它具有原型功能.
我的问题:当我克隆一个对象时,克隆无法访问/调用任何原型函数.
当我去访问克隆的原型函数时,我收到一个错误:
clone.render不是一个函数
你能告诉我如何克隆一个对象并保持其原型功能
这个简单的JSFiddle演示了我得到的错误:http://jsfiddle.net/VHEFb/1/
function cloneObject(obj)
{
// Handle the 3 simple types, and null or undefined
if (null == obj || "object" != typeof obj) return obj;
// Handle Date
if (obj instanceof Date) {
var copy = new Date();
copy.setTime(obj.getTime());
return copy;
}
// Handle Array
if (obj instanceof Array) {
var copy = [];
for (var i = 0, len = obj.length; i < len; ++i) {
copy[i] = cloneObject(obj[i]);
} …
Run Code Online (Sandbox Code Playgroud) 在尝试了几个实现深度比较和复制JSON可序列化对象之后,我注意到最快的只是:
function deep_clone(a){
return JSON.parse(JSON.stringify(a));
};
function is_equal(a,b){
return JSON.stringify(a) === JSON.stringify(b);
};
Run Code Online (Sandbox Code Playgroud)
不过,我觉得这是作弊.就像我会发现一些会在将来惹恼我的问题.使用它们可以吗?
如果深度复制工作,输出将是"好奇的乔治"而不是"安德的游戏".我怎样才能制作深层照片?这个问题的答案表明$.extend(true, [], obj)
创建了一个深层副本.然而我的例子表明它没有.
function Person(){}
Person.prototype.favorite_books = [];
var george = new Person();
george.favorite_books = ["Curious George"];
var kate = new Person();
kate.favorite_books = ["The Da Vinci Code", "Harry Potter"];
var people = [kate, george];
var people_copy = $.extend(true, [], people);
people_copy[0].favorite_books[0] = "Ender's Game";
$('#text').text(people[0].favorite_books[0]);
Run Code Online (Sandbox Code Playgroud)
解
我更新了jsFiddle.事实证明,如果对象是自定义对象(即$.isPlainObject
返回false),我需要单独深度复制数组中的每个对象.
我正在meterial-table
与React
. 我正在尝试从来自这样的 api 的数组中分配数据
<MaterialTable
columns={columns}
data={rows}
...
/>
Run Code Online (Sandbox Code Playgroud)
在哪里columns
和rows
在API数据。但我收到此错误:
TypeError: Cannot add property tableData, object is not extensible
Run Code Online (Sandbox Code Playgroud)
值得注意的是,当我使用模拟硬编码数据时,一切正常。经过一番搜索,我找不到任何解决方案,有什么帮助吗?
我一直在这里冲浪一段时间,仍然没有找到适合我的答案.
有没有办法在JS中深层复制非普通对象?
我已经尝试了,jQuery.extend(true, {}, this)
但它只克隆了一些,剩下的仍然是另一个对象的参考.
javascript ×9
jquery ×2
object ×2
reactjs ×2
angular ×1
axios ×1
clone ×1
deep-copy ×1
equality ×1
inheritance ×1
json ×1
material-ui ×1
typescript ×1
vue.js ×1
vuejs2 ×1