Angular 2 - 合并(扩展)对象

tad*_*aa9 34 javascript angularjs angular

如何将2个对象与Angular 2合并?

在AngularJS 1中,我们有"merge"和"extend"函数:https : //docs.angularjs.org/api/ng/function/angular.merge https://docs.angularjs.org/api/ng/function/ angular.extend

但在Angular 2中显然没什么!

你有好主意吗?

谢谢!

Gün*_*uer 30

Angular2不提供这样的东西.

你可以使用例如Object.assign()

Object.assign(target, source_1, ..., source_n)
Run Code Online (Sandbox Code Playgroud)

  • 小心IE.根据MDN,它不受支持. (6认同)
  • 如果您使用的是Angular-CLI,请找到`poyfills.ts`并取消注释支持IE9-11的代码. (4认同)

m.s*_*tos 27

在Angular中使用javascript的Object.assign()方法:

const obj = Object.assign({}, object1, object2);
Run Code Online (Sandbox Code Playgroud)

请注意,IE和Android尚不支持它.
您有三种跨浏览器支持选项:

1. Angular CLI

如果您使用Angular CLI的最新Angular版本,则打开/src/polyfills.ts并取消注释以下行:

// import 'core-js/es6/object';
Run Code Online (Sandbox Code Playgroud)

这将启用Object polyfill,它提供跨浏览器支持Object.assign().

打字稿

如果安装了Typescript 2.1或更高版本,则可以使用Object Spread:

const obj = {...object1, ...object2};
Run Code Online (Sandbox Code Playgroud)

3. Javascript

如果您不使用Angular CLI并且仍想使用Object.assign(),则可以将polyfill导入项目中.那里有很多,这里有几个:


Angular CLI用于其polyfill 的core-js npm包:

npm install core-js --save
Run Code Online (Sandbox Code Playgroud)

一个简单的填充工具从打字稿的转换为JavaScript:

Object.assign = Object.assign || function(t) {
    for (var s, i = 1, n = arguments.length; i < n; i++) {
        s = arguments[i];
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
            t[p] = s[p];
    }
    return t;
};
Run Code Online (Sandbox Code Playgroud)

最后,MDN polyfill.

  • 构建时的对象传播工具应该是确切的解决方案,因为大多数 Angular 2+ 用户正在使用 Typescript 构建应用程序。 (2认同)