“如何修复”;无法获取属性';应用';“未定义或空引用的”;asp.net内核错误,角度4

“如何修复”;无法获取属性';应用';“未定义或空引用的”;asp.net内核错误,角度4,asp.net,angular,Asp.net,Angular,我正在使用aspnetcore spa模板,使用命令“dotnet new angular”创建一个项目。看见当前的模板集是版本1.0.3,它将Angular 4.1.2添加到npm依赖项中。这对于快速运行项目非常有用 然而,开箱即用的“计数器”页面不适用于IE 11。如果您导航到“counter”链接,并查看IE的控制台,您将看到消息:“无法获取未定义或空引用的属性‘apply’”。当你点击“增量”按钮时,什么也没发生。(它适用于Chrome和Firefox,但不适用于IE。) 我做了一些挖掘

我正在使用aspnetcore spa模板,使用命令“dotnet new angular”创建一个项目。看见当前的模板集是版本1.0.3,它将Angular 4.1.2添加到npm依赖项中。这对于快速运行项目非常有用

然而,开箱即用的“计数器”页面不适用于IE 11。如果您导航到“counter”链接,并查看IE的控制台,您将看到消息:“无法获取未定义或空引用的属性‘apply’”。当你点击“增量”按钮时,什么也没发生。(它适用于Chrome和Firefox,但不适用于IE。)

我做了一些挖掘,似乎问题的根源在于.assign方法没有在IE11中实现。看

根据上面的链接,修复方法是导入Object.assign polyfill by MDN。然而,我不知道如何在项目中实现这一点。我尝试的是:

1) 添加到package.json:“mdn polyfills”:“^3.5.0”

2) 将“mdn-polyfills”添加到webpack.config.vendors.js

3) 从项目文件夹根目录下的命令提示符运行“webpack--config webpack.config.vendor.js”,这会导致错误:

Module not found: Error: Can't resolve 'mdn-polyfills'
我不知道下一步该怎么办。上述步骤1和2无法解决问题。我尝试向app.module.shared.ts添加以下内容:

import 'mdn-polyfills/Object.assign';
这很好,但没有任何帮助。当然,我不打算使用计数器页面,但我在一个我真正关心的组件中创建的表单上遇到了相同的错误(仅在IE 11中)

所以,再一次,我要为如何建立一个有效的环境而斗争,而不是实际编码角度组件。哦,我多么怀念那些日子,那时我可以通过NuGet添加一个包,它就可以工作了

如果有人能帮忙,我将不胜感激

更新:找到以下内容后,我将“es6对象分配”:“1.1.0”添加到package.json,然后将“es6对象分配”添加到webpack.config.vendors.js,然后从命令提示符运行webpack--config webpack.config.vendor.js(无错误)。然后在app.component.ts文件顶部添加以下内容:

import 'es6-shim';
import 'es6-promise';
import 'event-source-polyfill';
import 'es6-object-assign';
所有这些都没有任何区别。我仍然会收到“无法获取未定义或空引用的属性'apply'的错误”。我还注意到,此错误出现在每个页面上,尽管它似乎只影响计数器页面的功能(增量按钮不起任何作用)

我已经验证了问题的根源确实是.assign方法。错误来自vendor.js文件,返回行如下:

function combine(options) {
    return ((Object)).assign.apply(((Object)), [{}].concat(options));
}
一定有办法解决这个问题,但我不知所措

新更新:我相信这不是解决此问题的正确方法,但迫不得已,我在我的_Layout.cshtml页面顶部添加了一个脚本,我在这里找到了:

<>这确实解决了问题,使计数器页工作正常,但显然不是“角度的方式”,所以我不考虑这个解决方案是对我的问题的答案。如果有人能告诉我正确的方法来解决这个问题,我会考虑这个答案。

< P> 在CMD行中,转到您的aspnetcore spa模板项目文件夹

C:\Users\Jo\angularDemos2>
dotnet还原

把所有的Nuget软件包都取下来

然后键入

C:\Users\Joffr\angularDemos2>
npm安装


要从JASON文件中提取所有依赖项,首先要确保使用EDGE而不是IE,这将解决Vendor.js文件中的concat问题

有关更多信息,请使用Mr May教程


以解决函数中的
vendor.js
问题

功能组合(选项){
返回((对象)).assign.apply((对象)),[{}].concat(选项));

}
您是否找到了一个您喜欢的解决方案?我也遇到了同样的问题!谢谢!我只有一个boot.client.ts?您不能总是决定某人“必须使用”哪种浏览器。如果您与使用旧浏览器的客户合作,您只需让它工作即可。