【问题标题】:Curly braces around a parameter in AngularAngular中的参数周围的花括号
【发布时间】:2019-10-12 13:06:26
【问题描述】:

查看一些 Angular 代码:

    @Component({
      selector: 'my-app',
      templateUrl: 'kendoGrid.component.html'
    })
    export class AppComponent implements OnInit {

        public editDataItem: Product;
        public isNew: boolean;
        private editService: EditService;    

        public editHandler({dataItem}) { // What does wrapping a parameter in curly braces do?
            this.editDataItem = dataItem;
            this.isNew = false;
        }
    }

当我尝试在 Angular 上下文中使用参数搜索花括号/小胡子时,我找不到太多结果。 Angular中用花括号包裹参数有什么效果?

谢谢。

【问题讨论】:

标签: angular typescript object ecmascript-6


【解决方案1】:

而不是像添加一个对象

const dataItem = {test: "test"};

并将其传递给函数,在 ES6 中我们可以直接传递如下所示的对象。

public editHandler({test: "test"}) { 
        this.editDataItem = test;
        this.isNew = false;
    }

花括号只是一个对象。

【讨论】:

  • 不,你没有传递任何东西,你正在定义一个将传递一个对象的函数。
  • 是的,如果在外部定义,则不一定要定义。无论如何,您得到了更好的答案。干杯!
【解决方案2】:

它被称为destructuring,它的工作原理是这样的:

假设您有一个包含人名和年龄的对象:

const person = {
    name: "John Doe",
    age: 42
};

你有一个函数可以打印出传递给它的对象的age

function printAge(obj) {
    console.log(obj.age);
}

此函数使用整个对象 - 但是,由于我们实际上并不需要对象的其他属性(仅 age),我们可以使用解构来提取该属性:

function printAge({ age }) {
    console.log(age);
}

这是 ES6 对以下内容的简写:

function printAge(obj) {
    var age = obj.age;
    console.log(age);
}

所以,这个函数所做的一切:

public editHandler({ dataItem }) {
    this.editDataItem = dataItem;
    this.isNew = false;
}

这是 ES5:

public editHandler(item) {
    var dataItem = item.dataItem;
    this.editDataItem = dataItem;
    this.isNew = false;
}

【讨论】:

  • 换句话说:解构是通过键名访问复杂对象的键值对值的简写?
  • 是的,完全是@taylorswiftfan。
猜你喜欢
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2011-05-08
  • 2016-06-06
  • 1970-01-01
相关资源
最近更新 更多