首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不使用JQuery函数的情况下深入复制角4?

如何在不使用JQuery函数的情况下深入复制角4?
EN

Stack Overflow用户
提问于 2017-12-17 07:13:19
回答 2查看 8.6K关注 0票数 5

我有一个英雄数组,我通过*ngFor在列表中显示它,当我单击其中一个元素时,它复制到新变量和新变量上,然后通过双向绑定方式输入。我的heroClass:

代码语言:javascript
复制
export class Hero {
    id: number;
    name: string;
  } 

我的英雄-模拟名单:

代码语言:javascript
复制
import { Hero } from './heroClass';

export const HEROES: Hero[] = [
  { id: 11, name: 'Mr. Nice' },
  { id: 12, name: 'Narco' },
  { id: 13, name: 'Bombasto' },
  { id: 14, name: 'Celeritas' },
  { id: 15, name: 'Magneta' },
  { id: 16, name: 'RubberMan' },
  { id: 17, name: 'Dynama' },
  { id: 18, name: 'Dr IQ' },
  { id: 19, name: 'Magma' },
  { id: 20, name: 'Tornado' }
];

我的英雄部分:

代码语言:javascript
复制
   import { Component, OnInit } from '@angular/core';
    import { Hero } from '../hero';
    import { HEROES } from '../mock-heroes';

    @Component({
      selector: 'app-heroes',
      templateUrl: './heroes.component.html',
      styleUrls: ['./heroes.component.css']
    })
    export class HeroesComponent implements OnInit {

      heroes = HEROES;

      selectedHero: Hero;


      constructor() { }

      ngOnInit() {
      }

      onSelect(hero: Hero): void {
        this.selectedHero = hero;
      }
    }

heroes.component.html

代码语言:javascript
复制
<h2>My Heroes</h2>
<ul class="heroes">
  <li *ngFor="let hero of heroes"
    [class.selected]="hero === selectedHero"
    (click)="onSelect(hero)">
    <span class="badge">{{hero.id}}</span> {{hero.name}}
  </li>
</ul>

<div *ngIf="selectedHero">

  <h2>{{ selectedHero.name | uppercase }} Details</h2>
  <div><span>id: </span>{{selectedHero.id}}</div>
  <div>
    <label>name:
      <input [(ngModel)]="selectedHero.name" placeholder="name">
    </label>
  </div>

</div>

问题是,当我选择一个英雄,并显示它的副本在文字输入,并改变它的英雄名单,选择也在改变。

在angularjs 1中,我通过使用方法构建的angular.copy()来防止这个问题,但在角2中,我必须创建新的英雄,并将selectedHero的属性归于主要英雄:

代码语言:javascript
复制
  selectedHero: new Hero();
onSelect(hero: Hero): void {
        this.selectedHero.name = hero.name;
         this.selectedHero.id= hero.id;
      }

是否有其他方法可以在不使用jquery或js函数的情况下深入复制角2?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-17 07:23:53

在我看来,这是相当讨厌的,但它确实有效。

代码语言:javascript
复制
this.selectedHero = JSON.parse(JSON.stringify(hero));

对于浅拷贝:可以使用铺展操作符:

代码语言:javascript
复制
this.selectedHero = {...hero};
let {...example} = hero;
票数 13
EN

Stack Overflow用户

发布于 2017-12-17 08:19:17

使用cloneDeep函数。

对于深度克隆对象来说,没有任何关于角的东西,因为提供这样的功能并不是角的问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47852998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档