我正在使用ASP.NET MVC和AngularJS开发示例应用程序.
在服务器端代码中,我编写了一个Action过滤器属性,我需要检查请求是否是正常请求(浏览器)或AJAX请求.
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if ( filterContext.HttpContext.Request.IsAjaxRequest())
{
}
}
Run Code Online (Sandbox Code Playgroud)
在使用$ http Angular服务进行AJAX请求的情况下,上面的代码片段"IsAjaxRequest()"中提到的方法没有返回TRUE.
我发现请求没有X-Requested-With标头,甚至添加标头也没有解决请求.
注意:这不是CORS电话.
所以我的问题.
filterContext.HttpContext.Request.IsAjaxRequest()如何决定请求是否为AJAX?
我可以检查请求标头(是否有特定标头)并确定请求是否是AJAX.这是正确而唯一的方法吗?
我的Atom编辑器显示:
模块'"C:/ express4/node_modules/@ angular/platform-browser-dynamic/index"'没有导出成员'bootstrap'.at第2行col 10
对于TypeScript文件中的以下导入:
import { bootstrap } from '@angular/platform-browser-dynamic';
Run Code Online (Sandbox Code Playgroud)
知道这个警告的原因是什么?
在我的剃刀视图中,我使用@ Html.ActionLink来显示超链接,并且显示的文本是硬编码的(在这种情况下为"Brand").视图的模型是@model IEnumerable
Exisitng View
@Html.ActionLink("Brand", "Index", new { sortOrder = ViewBag.BrandSortParm })
Run Code Online (Sandbox Code Playgroud)
想要使用@ Html.DisplayNameFor作为@Html.ActionLink中的第一个参数,而不是对文本进行硬编码,如下所述,这给出了编译错误
@Html.ActionLink(@Html.DisplayNameFor(model => model.BRAND_NAME), "Index", new { sortOrder = ViewBag.BrandSortParm })
Run Code Online (Sandbox Code Playgroud)
请让我知道,怎么做.
在AngularJS(版本1.x)中,我们有ng-notify用于显示通知,我们想知道如何在Angular 2中实现相同的功能.
知道怎么做吗?
我的Angular 2应用程序在服务中有2个方法[GetCategories()和GetCartItems()],这两个方法都返回Observables.
为了从我的组件一个接一个地调用这两个方法,我写了下面的代码
ngOnInit()
{
this.appService.GetCategories().subscribe( (data) => {
this.appService.categories = data;
this.appService.GetCartItems().subscribe( {
next: (data) => { this.appService.cart = data},
error: (err) => { this.toaster.error('cart==>' + err)}
})
});
}
Run Code Online (Sandbox Code Playgroud)
基本上从GetCategories()的订阅中调用GetCartItems,我觉得这不是正确的方法,这是一种回调地狱.
知道如何以更好的方式实现这一点(比如在promises中链接"then")?
在下面的类型脚本代码中,无论名称是"public"还是"private",生成的java脚本代码都是相同的.
所以我的问题是,如何确定构造函数参数何时应该是公共参数还是私有参数?
// typescript code
class Animal {
constructor( public name: string) {
}
}
// generated JS code
var Animal = (function () {
function Animal(name) {
this.name = name;
}
return Animal;
}());
Run Code Online (Sandbox Code Playgroud) 在我的示例Angular 2应用程序中,我使用ngrx/store和ngrx/effects进行状态管理.
下面是组件中添加新项目的功能之一.
addAuthor() {
this.store.dispatch(addAuthorAction(this.fg.value));
console.log('2')
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码"this.store.dispatch(addAuthorAction(this.fg.value));"中 负责向服务器进行AJAX调用并向数据库添加新作者,这很好.
因为"this.store.dispatch(addAuthorAction(this.fg.value));" 是一个异步操作,即使在AJAX调用完成之前,也会执行console.log("2")语句.
我的问题是,需要修改什么才能在store.dispatch完成后执行console.log.
在MVC 4,为了使客户端验证的观点,应该两键ClientValidationEnabled和UnobtrusiveJavaScriptEnabled在web.config中是真的吗?
WEB.CONFIG
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
Run Code Online (Sandbox Code Playgroud) 当我浏览Angular2文档时,我在这里遇到了下面的代码.
SRC/polyfills.ts
import 'core-js/es6';
import 'core-js/es7/reflect';
require('zone.js/dist/zone');
if (process.env.ENV === 'production') {
// Production
} else {
// Development
Error['stackTraceLimit'] = Infinity;
require('zone.js/dist/long-stack-trace-zone');
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我们可以看到有两个import和require语句.
"core-js"和"zone.js"都是节点模块.
我的问题是; 为什么import用于core-js和require"zone.js",有什么特别的原因吗?
我能够以下面提到的方式在我的角度组件中创建一个Observable
...
...
import { Observable } from 'rxjs/Observable';
..
...
let observable = new Observable( function subscribe(observer) {
observer.next(1);
observer.next(2);
observer.next(3);
observer.next(4);
setTimeout(() => {observer.next(5); },9000);
});
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何创建一个主题,有人可以提供相同的例子吗?
angular ×5
typescript ×3
asp.net-mvc ×2
rxjs ×2
ajax ×1
angularjs ×1
ngrx ×1
ngrx-effects ×1
node.js ×1
redux ×1
rxjs5 ×1